我在家里有一个postgresql数据库,在云上有一个。我想将我的家庭数据库添加到云数据库,以便我可以在数据库之间轻松查询。如何才能做到这一点?不使用dblink
http://www.postgresonline.com/journal/archives/44-Using-DbLink-to-access-other-PostgreSQL-Databases-and-Servers.html
我的家庭数据库将使用动态IP提供程序(我可以添加动态IP地址,如myhomedb.dedyn.io到postgresql设置?)
如果有任何问题我会说明这一切。我的家庭数据库将仅用于更新大量数据,但不是关键任务(因为我们知道云计算并不便宜)。
提前致谢。
看起来像postgres-fdw
是要走的路:https://www.postgresql.org/docs/current/postgres-fdw.html
首先安装扩展:
CREATE EXTENSION postgres_fdw;
然后使用
CREATE SERVER
创建一个外部服务器。在这个例子中,我们希望连接到主机192.83.123.89
上的PostgreSQL服务器,监听端口5432
。建立连接的数据库在远程服务器上命名为foreign_db
:
CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.83.123.89', port '5432', dbname 'foreign_db');
还需要使用
CREATE USER MAPPING
定义的用户映射来标识将在远程服务器上使用的角色:
CREATE USER MAPPING FOR local_user SERVER foreign_server OPTIONS (user 'foreign_user', password 'password');
现在可以使用
CREATE FOREIGN TABLE
创建一个外表。在此示例中,我们希望访问远程服务器上名为some_schema.some_table
的表。它的本地名称是foreign_table
:
CREATE FOREIGN TABLE foreign_table ( id integer NOT NULL, data text ) SERVER foreign_server OPTIONS (schema_name 'some_schema', table_name 'some_table');
在
CREATE FOREIGN TABLE
中声明的列的数据类型和其他属性与实际的远程表匹配是至关重要的。列名也必须匹配,除非您将column_name
选项附加到各个列以显示它们在远程表中的命名方式。在许多情况下,使用IMPORT FOREIGN SCHEMA
比手动构造外部表定义更可取。