如果您尝试重新发明数据库复制,请考虑一种生产就绪的解决方案。
如果您只想在数据库之间复制选定的数据,您可以使用附加模块dblink将数据直接从 DB 复制到 DB,可选择使用 SSL 加密。服务器可以位于网络中的任何位置。
从另一个数据库(网络中的任何地方)获取数据的基本示例如下所示:
CREATE TABLE tbl (tbl_id integer, col1 text, col2 text);
SELECT dblink_connect('myserver');
-- FDW postgresql, USER MAPPING FOR postgres; PW from .pgpass
INSERT INTO tbl (tbl_id, col1, col2) -- same table exists on foreign server
SELECT *
FROM dblink('SELECT tbl_id, col1, col2 FROM tbl') AS b(
tbl_id integer
,col1 text
,col2 text);
SELECT dblink_disconnect();
您可以轻松地将其封装在一个函数中:
CREATE OR REPLACE FUNCTION foo()
RETURNS text AS
$func$
-- code from above goes here
$func$ LANGUAGE sql;
称呼:
SELECT foo();
我在FOREIGN SERVER
这里使用。要创建的基本示例语句:
FDW(仅当您还没有它时):
CREATE FOREIGN DATA WRAPPER postgresql VALIDATOR postgresql_fdw_validator;
国外服务器:
CREATE SERVER myserver
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '1.2.3.4', port '5432', dbname 'mydb', sslmode 'require');
通过添加sslmode 'require'
到您的连接字符串,您只强制执行 SSL 加密连接。在此处阅读手册中的更多信息。
用户映射:
CREATE USER MAPPING FOR postgres
SERVER myserver OPTIONS (user 'postgres');
为了简化事情并使其安全,我使用该.pgpass
文件来提供密码。在使用任何这些之前,您可能需要阅读一些文档。