#postgresql #pg-dump #pg-restore
#postgresql #pg-дамп #pg-восстановить
Вопрос:
В настоящее время я делаю что-то вроде:
pg_dump -a -O -t my_table my_db > my_data_to_import.sql
Чего я действительно хочу, так это иметь возможность импортировать / экспортировать только данные, не вызывая конфликтов с моим полем autoid или перезаписи существующих данных.
Может быть, я неправильно представляю весь процесс?
Ответ №1:
Вы можете использовать COPY со списком столбцов для дампа и восстановления только данных из одной таблицы. Например:
COPY my_table (column1, column2, ...) TO 'yourdumpfilepath';
COPY my_table (column1, column2, ...) FROM 'yourdumpfilepath';
OID является одним из системных столбцов. Например, это не включено в SELECT * FROM my_table
(вам нужно использовать SELECT oid,* FROM my_table
). OID — это не то же самое, что обычный столбец id, созданный вместе с другими столбцами в CREATE TABLE. Не в каждой таблице есть столбец OID. Установите флажок default_with_oids по умолчанию. Если для параметра установлено значение off, то, вероятно, у вас в таблице нет столбца OID, но даже если это так, вы все равно можете создать таблицу с OID, используя WITH OIDS
опцию. Рекомендуется не использовать OID в качестве столбца таблицы (вот почему для default_with_oids до PostgreSQL 8.1 было установлено значение off).
Комментарии:
1. И для импорта / экспорта этих данных без идентификатора объектов могу ли я использовать переключатель OID?
2. @Paperino: Да, есть логическая опция OIDS для КОПИРОВАНИЯ.
3. Является ли OID тем же, что я пытаюсь исключить? Т.е. для таблицы Books моим полем идентификатора является ‘id’? Обязательно ли определять все столбцы вручную?
Ответ №2:
pg_dump --insert -t TABLENAME DBNAME > fc.sql
cat fc.sql | sed -e 's/VALUES [(][0-9][0-9],/VALUES (/g'|sed -e 's/[(]id,/(/g' > fce.sql
psql -f fce.sql DBNAME
При этом таблица со столбцами выгружается в fc.sql, затем используется sed для удаления идентификатора и связанного с ним значения