2016-11-08 2 views
1

Что я хотел бы сделать этоPostgresql дамп/восстановление колонки

psql -d xxx -c "select user_id from res_partner;" > backup.txt 

Тогда

psql -d xxx -c "update res_partner set user_id = null"; 

Большая проблема остается в вставке данных обратно в таблицу ... Есть способ сбрасывать конкретный столбец конкретной таблицы в postgresql, а затем вставлять все обратно?

Чтобы добавить немного больше контекста, реальная проблема заключается в том, что я обновляю модули из веб-службы под названием Odoo. Каждый модуль может вставлять/обновлять ограничения ... В моем случае я изменил ограничение на тот же столбец, чтобы ссылаться на другой столбец. Он работает хорошо, но когда мы обновляем сервер, он пытается вставить обратно старый внешний ключ, а затем, когда мой модуль загружается, он добавит мой внешний ключ ... но поскольку он указывает на другой столбец, старый внешний ключ не удался с ошибка ограничения ... Я хотел бы либо подавить проверку ограничений во время обновления, либо резервное восстановление данных. Нулевое значение не должно вызывать ошибку ограничения.

ответ

2

Извините, вы не поняли контекст, но можете рассказать вам, как сбрасывать/восстанавливать ваши данные :). Мое решение очень простое.

первый шаг, сохранить данные в файл
COPY res_partner(id, user_id) TO '/tmp/filename.txt';
второй этап - восстановление данных на временную таблицу
CREATE TABLE res_partner_tmp(id int, user_id int);
COPY res_partner_tmp(id, user_id) FROM '/tmp/filename.txt';

Для вас случае, не может быть никакой необходимости сбрасывать в файл, просто создать копию таблицы
CREATE TABLE res_partner_tmp AS SELECT id,user_id FROM res_partner;

И последний шаг - восстановление данных
UPDATE res_partner o SET user_id=c.user_id FROM res_partner_tmp c WHERE o.id=c.id;

+0

Он отлично поработал. В итоге я использовал таблицу temp вместо дампа в файл. Но копия из/в файл - это в значительной степени то, что я искал. –

Смежные вопросы