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