Различные предложения WHERE в зависимости от схемы таблицы - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь создать дамп mysql для базы данных с помощью инструмента командной строки «mysqldump», и я пытаюсь сделать что-то уникальное. По сути, если таблица содержит определенный столбец, дамп в соответствии с этими ограничениями, в противном случае, дамп всей таблицы. Но из-за особенностей параметров командной строки mysqldump все это должно быть в одном предложении WHERE.

В коде psuedo это то, что я должен сделать:

if table.columns contains "user_id":
    where = "user_id=1" // dump rows where user_id=1
else:
    where = "TRUE" // dump whole table

Но во всех единицах where, которые будут применяться к каждой таблице, mysqldump встречается

1 Ответ

0 голосов
/ 27 июня 2018

Опция --where для mysqldump может использоваться для передачи выражения в SELECT для каждой таблицы, но она передает то же самое выражение в все таблицы.

Если вам нужно использовать разные предложения WHERE для разных подмножеств таблиц, вам нужно будет выполнить более одной команды mysqldump и выполнить каждую команду для разных наборов таблиц


Ваш комментарий:

Нет, ссылки на столбцы в запросе SQL должны быть исправлены во время синтаксического анализа запроса, и это означает, что любые ссылки на столбцы должны ссылаться на столбцы, которые существуют в таблице. В SQL нет способа создать выражение, которое использует столбцы, если они существуют, и игнорирует ссылку на столбец, если столбец не существует.

Чтобы сделать то, что вы описываете, вам нужно запросить INFORMATION_SCHEMA, чтобы увидеть, какие столбцы существуют в таблице, а затем условно отформатировать SQL-запрос для дампа, основываясь на найденных столбцах в таблице.

Но в mysqldump у вас нет возможности сделать это. Это должно быть реализовано в коде для mysqldump.

Не стесняйтесь получить исходный код для mysqldump и добавить свою собственную логику к нему. Похоже, много работы.

...