postgresql将特定表中的特定列从DB导出到另一个的最佳方法是什么

Jay*_*Cee 6 postgresql postgresql-9.3

当我执行此命令时:

SELECT language, title FROM cms_title WHERE language != 'en' AND title != 'Blog';
Run Code Online (Sandbox Code Playgroud)

我看到要从开发服务器上的数据库复制到生产服务器的页面.

因此,我的目标是转储这些特定页面,然后将它们插入生产数据库中.

我的问题是:有可能吗?这是最好的做法/做法吗?

非常感谢您提出我的请求所花费的时间.

Gab*_*ger 12

我可以看到4种方法:

1.将列导出为.csv第二个DB并从中导入

COPY (
    SELECT language, title FROM cms_title WHERE language != 'en' AND title != 'Blog'
) TO '/path/to/csv/cms_title_dump.csv' WITH CSV HEADER DELIMITER ';';
Run Code Online (Sandbox Code Playgroud)

把它放在该.csv服务器上的目标服务器可访问的路径中执行导入:

COPY cms_title FROM '/path/to/csv/cms_title_dump.csv' DELIMITER ';' CSV;
Run Code Online (Sandbox Code Playgroud)

或\ copy以在psql + db中使用该命令

2. 在seccond DB上使用pg_dump和restore(pg_restore)转储它

倾倒:

pg_dump opencare -F c -h db_address -U db_user -p sb_port -t cms_title  -f /path/to/dump/cms_title.dump;
Run Code Online (Sandbox Code Playgroud)

恢复:

pg_restore -h dest_db_address -U dest_db_user -p dest_dp_port -d db_name /path/to/dump/cms_title.dump;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您必须记住pg_dump执行WHOLE表数据的转储.您无法从表中选择要转储的行子集.因此,当从ona DB到另一个DB进行表镜像时,此选项是合适的.

3.使用dblinkPostgreSQL模块执行coss-database查询

4.生成INSERT查询并在第二台服务器上执行:

`SELECT
    'INSERT INTO cms_title(language, title) VALUES '
        || string_agg( '(' || language || ', '|| title || ')',  ',' )
        || ';'
FROM cms_title WHERE language != 'en' AND title != 'Blog';`
Run Code Online (Sandbox Code Playgroud)

  • COPY takson FROM 'csv 文件路径' DELIMITER ';' CSV 标头; (2认同)

sta*_*nov 10

我这样做的方式如下:

1.创建转储:

psql -hdbhost1 -ddbname -Udbuser -c "copy(SELECT language, title FROM cms_title WHERE language != 'en' AND title != 'Blog') to stdout" > dump.sql
Run Code Online (Sandbox Code Playgroud)

2.import dump:

psql -hdbhost2 -ddbname -Udbuser -c 'copy cms_title from stdin' < dump.sql
Run Code Online (Sandbox Code Playgroud)

这会将导入的数据附加到表中.