当我执行此命令时:
SELECT language, title FROM cms_title WHERE language != 'en' AND title != 'Blog';
我看到要从开发服务器上的数据库复制到生产服务器的页面。
因此,我的目标是转储这些特定页面,然后将它们插入到生产数据库中。
我的问题是: 可能吗 ?这是最好的做法/做法吗?
非常感谢你花了我的请求所花的时间。
答案 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特定列转储
创建cms_title_dump.csv文件。
my @a = qw(A_SPACE_B C);
s/_SPACE_/ /g for @a;
给予写入权限
touch /home/www/html/cms_title_dump.csv
执行此查询
chmoc 777 /home/www/html/cms_title_dump.csv
更改文件权限。作为只读