Postgres:pg_restore / pg_dump所有内容除了表的表id之外

时间:2011-06-03 14:48:08

标签: postgresql pg-dump pg-restore

目前我正在做类似的事情:

pg_dump -a -O -t my_table my_db > my_data_to_import.sql

我真正想要的是能够导入/导出数据而不会导致与我的自动字段冲突或覆盖现有数据。

也许我在想整个过程是错的?

2 个答案:

答案 0 :(得分:3)

您可以使用COPY列列表来转储和恢复一个表中的数据。例如:

COPY my_table (column1, column2, ...) TO 'yourdumpfilepath';
COPY my_table (column1, column2, ...) FROM 'yourdumpfilepath';

OID是system columns之一。例如,它不包含在SELECT * FROM my_table中(您需要使用SELECT oid,* FROM my_table)。 OID与CREATE TABLE中的其他列一起创建的普通id列不同。并非每个表都有OID列。检查default_with_oids选项。如果它设置为off,那么probalby你的表中没有OID列,但即使这样,你仍然可以使用WITH OIDS选项创建带有OID的表。建议不要将OID用作表的列(这就是为什么在PostgreSQL 8.1之前将default_with_oids设置为off)。

答案 1 :(得分:0)

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删除ID和与之关联的值