我有一个生产数据库,比如一千万行.我想从生产过去一小时中提取10,000行左右,然后将它们复制到我的本地方框中.我怎么做?
假设查询是:
SELECT * FROM mytable WHERE date > '2009-01-05 12:00:00';
解决方法
资源:
psql -c "COPY (SELECT * FROM mytable WHERE ...) TO STDOUT" > mytable.copy
目的地:
psql -c "COPY mytable FROM STDIN" < mytable.copy
这假设mytable在源和目标中具有相同的模式和列顺序.如果不是这种情况,您可以尝试使用STDOUT CSV HEADER和STDIN CSV HEADER而不是STDOUT和STDIN,但我还没有尝试过.
如果mytable上有任何自定义触发器,则可能需要在导入时禁用它们:
psql -c "ALTER TABLE mytable DISABLE TRIGGER USER; \ COPY mytable FROM STDIN; \ ALTER TABLE mytable ENABLE TRIGGER USER" < mytable.copy