Axl*_*Axl 5 sql pg-dump postgresql-9.0
我需要将表的内容从一个数据库复制到另一个数据库,并使用相同的表,该表当前为空.
我计划从旧表中转储表数据,然后将其导入新数据库中的空表.但是,我遇到了一些我不理解使用pg_dump的行为.
我尝试使用以下命令将表数据转储到文件:
pg_dump -a -t '"my_table"' my_database > /tmp/my_table.sql
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我只得到8条记录,如果我像这样查看表格,表格中有超过1000条记录:
SELECT * FROM my_table;
Run Code Online (Sandbox Code Playgroud)
所以,我尝试使用COPY命令生成.csv文件,我看到类似的行为:
COPY my_table TO '/tmp/my_table.csv' WITH CSV HEADER;
Run Code Online (Sandbox Code Playgroud)
我得到与pg_dump相同的8条记录.但是,有:
COPY (SELECT * FROM my_table) TO '/tmp/my_table.csv' WITH CSV HEADER;
Run Code Online (Sandbox Code Playgroud)
我得到了所有1266条记录.
我会假设这些命令都应该返回相同的数据,但显然,我错了.有什么不同?
它有可能my_table
是继承层次结构的一部分吗?我问是因为http://www.postgresql.org/docs/9.0/interactive/sql-copy.html#AEN58984有这个:
COPY 只处理指定的特定表;它不会将数据复制到子表或从子表复制数据。因此,例如
COPY table TO
显示与 相同的数据SELECT * FROM ONLY table
。但COPY (SELECT * FROM table) TO ...
可用于转储继承层次结构中的所有数据。
您应该能够通过运行进行检查:
SELECT * FROM ONLY my_table;
Run Code Online (Sandbox Code Playgroud)
如果只返回 8 条记录,那么我们就走在正确的轨道上,我们只需要找到子表(对此,如何查找从 PSQL 中的另一个表继承的子表将很有帮助)。
如果没有,那么我不确定 - 我想知道规则或触发器是否参与其中,但我目前不知道如何参与。不过,也许它给了其他人一个想法......?