postgresql上的简单复制

时间:2014-09-07 20:43:16

标签: postgresql replication database-replication

我在数据库上创建了两个表,我需要将它们复制到另一个数据库,但是在同一台机器上。我怎么能这样做?

观测值:

CREATE TABLE cities1 ( city varchar(80) primary key, location point );

CREATE TABLE weather10 ( city varchar(80) references cities1(city), temp_lo int, temp_hi int, prcp real, date date )

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');//insere uma linha na tabela com os dados

INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

1 个答案:

答案 0 :(得分:0)

如果表已存在于database1和database2中:

在数据库1上:

psql database1
copy cities1 to '/tmp/cities1.copy';
copy weather10 to '/tmp/weather10.copy';

在数据库2上:

psql database2
truncate cities1, weather10;
copy cities from '/tmp/cities1.copy';
copy weather10 from '/tmp/weather10.copy';

或者,从命令行开始,假设database2存在,但这些表不存在于database2中:

pg_dump database1 -tcities1 -tweather10 | psql database2

如果这些表已存在于database2中,但未填充它们:

pg_dump -a database1 -tcities1 -tweather10 | psql database2

如果表已经存在并且数据库2中包含数据:

echo 'truncate cities, weather10;' > /tmp/tfile
pg_dump -a database1 -tcities1 -tweather10 >> /tmp/tfile
psql database2 -f /tmp/tfile
rm /tmp/tfile

您甚至可以使用外包装或dblink完全在database1中进行复制操作。

我想到的另一件事是,您可以创建两个数据库并将其复制到另一个数据库,这将完成整个数据库,而不仅仅是两个表。

如果您只需要在第二个数据库中使用相同的数据,则可以在第二个数据库中创建一个外部包装器,它只引用第一个数据库中的数据(不复制它)。

可能还有其他方法: - )

祝你好运, -g