目前我正在做一些类似的事情:
pg_dump -a -O -t my_table my_db > my_data_to_import.sql
我真正想要的是能够只导入/导出数据,而不会与我的autoid字段发生冲突或覆盖现有数据。
也许我认为整个过程都错了?
您可以将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与CREATETABLE中与其他列一起创建的普通id列不同。并非每个表都有OID列。选中default_with_oids选项。如果它被设置为off,那么很可能您的表中没有OID列,但即使是这样,您仍然可以使用WITH OIDS
选项创建具有OID的表。建议不要将OID用作表的列(这就是为什么在PostgreSQL 8.1之前将default_with_oids设置为off的原因)。
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和与之相关的值