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

时间:2015-11-20 12:18:46

标签: postgresql postgresql-9.3

当我执行此命令时:

SELECT language, title FROM cms_title WHERE language != 'en' AND title != 'Blog';

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

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

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

非常感谢你花了我的请求所花的时间。

3 个答案:

答案 0 :(得分:11)

我可以看到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 ';';

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

COPY cms_title FROM '/path/to/csv/cms_title_dump.csv' DELIMITER ';' CSV;

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

<强> 2。使用pg_dump转储它并在第二个数据库

上恢复(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;

恢复:

pg_restore -h dest_db_address -U dest_db_user -p dest_dp_port -d db_name /path/to/dump/cms_title.dump;

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

第3。使用dblink模块为PostgreSQL执行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';`

答案 1 :(得分:8)

我是按照以下方式做的:

1.create dump:

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

2.import dump:

psql -hdbhost2 -ddbname -Udbuser -c 'copy cms_title from stdin' < dump.sql

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

答案 2 :(得分:0)

我通常这样做For Import特定列转储

  1. 创建cms_title_dump.csv文件。

    my @a = qw(A_SPACE_B C);
    s/_SPACE_/ /g for @a;
    
  2. 给予写入权限

    touch /home/www/html/cms_title_dump.csv
    
  3. 执行此查询

    chmoc 777 /home/www/html/cms_title_dump.csv
    
  4. 更改文件权限。作为只读