我有一个生产数据库,比如说,有一千万行。我想从过去一个小时的生产过程中提取出大约10,000行,并将它们复制到我的本地机器中。我该怎么做?
假设查询是:
SELECT * FROM mytable WHERE date > '2009-01-05 12:00:00';如何获取输出,将其导出为某种转储文件,然后将该转储文件导入到数据库的本地开发副本中--尽可能快速、轻松?
发布于 2011-07-09 01:09:50
来源:
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发布于 2009-01-06 09:39:55
源服务器:
BEGIN;
CREATE TEMP TABLE mmm_your_table_here AS
SELECT * FROM your_table_here WHERE your_condition_here;
COPY mmm_your_table_here TO 'u:\\source.copy';
ROLLBACK;您的本地邮箱:
-- your_destination_table_here must be created first on your box
COPY your_destination_table_here FROM 'u:\\source.copy';发布于 2009-01-05 23:27:14
在psql中,您只需将copy与您给出的查询一起使用,将其导出为CSV (或其他格式),使用\c切换数据库并导入它。
在psql中查看\h copy。
https://stackoverflow.com/questions/414849
复制相似问题