Я пытаюсь сделать дамп 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 встречается
Параметр --where
для mysqldump может использоваться для передачи выражения SELECT для каждой таблицы, но он передает одно и то же выражение для всех таблиц.
Если вам нужно использовать разные предложения WHERE для разных подмножеств таблиц, вам нужно будет выполнить более одной команды mysqldump и выполнить каждую команду с помощью другого набора таблиц
Ваш комментарий:
Нет, ссылки на столбцы в SQL-запросе должны быть исправлены во время разбора запроса, и это означает, что любые ссылки на столбцы должны ссылаться на столбцы, которые существуют в таблице. Нет способа сделать выражение в SQL, которое использует столбцы, если они существуют, и игнорирует ссылку на столбец, если столбец не существует.
Чтобы сделать то, что вы описываете, вам нужно будет запросить информацию INFORMATION_SCHEMA, чтобы узнать, какие столбцы существуют в таблице, а затем отформатировать SQL-запрос для дампа условно, на основе найденных столбцов, существующих в таблице.
Но в mysqldump у вас нет возможности сделать это. Он должен быть реализован в коде для mysqldump.
Не стесняйтесь получать исходный код для mysqldump и добавлять к нему свою собственную логику. Похоже, что много работы.