Postgres: pg_restore / pg_dump все, КРОМЕ идентификаторов таблицы для таблицы

#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 для удаления идентификатора и связанного с ним значения