可以使用 postgres_fdw 通过 ssh 隧道连接吗?
该数据库只能从数据库服务器访问,我需要从另一台远程服务器加入。数据库服务器使用 SSH 密钥登录。
如果可以的话请问如何做?
假设我有一个类似的查询
select * from remote_table
join local_table using(common_key)
Run Code Online (Sandbox Code Playgroud)
其中 remote_table 是一个FOREIGN TABLEwithpostgres_fdw并且local_table是一个普通表。
local_table小(100 行)和remote_table大(数百万行)。
看起来远程表被整体拉取并在本地加入,此时将较小的表发送到远程服务器并远程加入会更有效。
有没有办法让 postgres_fdw 做到这一点?
我想在我的数据库中使用postgres_fdw和存放 a FOREIGN TABLE。是否可以在本地服务器上定义一个触发器FOREIGN TABLE来识别INSERT远程服务器上的事件。如果是这样,请提供一个例子。
数据流:
未报告错误,但对 table_b 的写入似乎不成功。
这是我尝试过的:
CREATE FOREIGN TABLE x.table_a -- note the foreign table is in a different schema than the local table
( id BIGINT NOT NULL
, data_ts TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
, xchg_ts TIMESTAMPTZ DEFAULT NULL
)
SERVER remote_server
OPTIONS (schema_name 'schema_a', table_name 'table_a')
;
CREATE TABLE y.table_b
( xchg_id BIGINT
, error_msg TEXT DEFAULT NULL
);
Run Code Online (Sandbox Code Playgroud)
CREATE OR REPLACE FUNCTION …Run Code Online (Sandbox Code Playgroud) 是否可以使用Postgres Foreign Data Wrapper创建一个指向视图而不是表的外表?
我使用postgres_fdw在两个数据库之间创建链接.然后我设置外部表并从外表执行一些插入到我的实时表.我注意到它需要相当长的时间,因为它们没有索引.
你可以在外表上创建一个索引,它是标准的吗?
CREATE INDEX ON foreign_table_name (column)?
Run Code Online (Sandbox Code Playgroud) 我在RDS中有两个Postgres 9.3.5实例,它们都在一个安全组中,该实例允许安全组中的所有入站流量和所有出站流量。我试图建立一个数据库,以便能够通过postgres_fdw从另一个表中选择几个。
我已经创建了服务器-
create server master
foreign data wrapper postgres_fdw
OPTIONS (dbname 'main',
host 'myinstance.xxxxx.amazonaws.com');
Run Code Online (Sandbox Code Playgroud)
以及必要的用户映射和外部表-
create foreign table condition_fdw (
cond_id integer,
cond_name text
) server master options(table_name 'condition', schema_name 'data');
Run Code Online (Sandbox Code Playgroud)
然而,一个简单的select count(*) from condition_fdw给我
ERROR: could not connect to server "master"
DETAIL: could not connect to server: Connection timed out
Is the server running on host "myinstance.xxxxxx.amazonaws.com" (xx.xx.xx.xx) and accepting
TCP/IP connections on port 5432?
Run Code Online (Sandbox Code Playgroud)
我可以通过psqlEC2实例连接到两个数据库。我知道直到最近RDS才不支持postgres_fdw,但我正在运行支持的新版本。
在创建服务器语句中,我尝试用其解析为的IP地址替换“ myinstance.xxxxxx.amazonaws.com”,但不走运。
有任何想法吗?
我在具有相同安全组的ec2实例上安装了postgres,主服务器的外部表的行为符合预期。
同一RDS实例上的数据库之间的postgres_fdw有效。
这一切使我认为Postgres RDS实例上来自postgres_fdw的传出连接一定有问题。
根据DOC,我不能这样做.但完全重新创建表格迫使我做大量工作而不是简单:
ALTER FOREIGN TABLE table_name ALTER SERVER new_server_name;
Run Code Online (Sandbox Code Playgroud) 有没有人能够让 Camunda 与 Spring Boot 和 mongodb 一起运行?
我尝试了几种方法,但总是陷入一堵砖墙。
我试过的:
1. jpa/hibernate-ogm
在创建我自己的CamundaDatasourceConfiguration和ProcessEngineConfigurationImpl. 当 Camunda 尝试获取表元数据时失败。我无法阻止这种行为。
2. mongo 的 jdbc 驱动程序
我通过 progress设置了 jdbc url 和驱动程序类。Camunda 然后在启动过程中卡住,并没有达到 Jetty 完全启动的程度,即日志中的“ Jetty 在端口 XYZ 上启动”消息。
3.带有mongo FDW的带有postgres的camunda
FDW是一种用于 postpress 接口外部数据源的机制。通过这种方式,应用程序可以通过 jdbc 使用 postgres,而 FDW 将负责读取和写入外部源的日期,无论是文件、mongodb 等。
在意识到 1 和 2 不起作用后,我开始研究 3。
有没有人成功做到这一点,可以分享如何?
我有一个具有自定义类型的数据库,无法使用“ IMPORT FOREIGN SCHEMA public FROM SERVER replica_db1 INTO db1since”导入CREATE FOREIGN TABLE失败。如何导入自定义类型?另外,自定义类型是从公共模式引用的,如何将其更改为使用本地服务器的模式?
reporting=> IMPORT FOREIGN SCHEMA public FROM SERVER replica_db1 INTO db1;
ERROR: type "public.custom_type" does not exist
LINE 8: start public.custom_type OPTIONS (column_name 'start'),
^
QUERY: CREATE FOREIGN TABLE table1 (
id bigint OPTIONS (column_name 'id') NOT NULL,
start public.custom_type OPTIONS (column_name 'start'),
"end" public.custom_type OPTIONS (column_name 'end')
) SERVER replica_db1
OPTIONS (schema_name 'public', table_name 'table1');
CONTEXT: importing foreign table "table1"
reporting=> IMPORT FOREIGN TYPE public …Run Code Online (Sandbox Code Playgroud) 我有一个用例将数据分布在许多服务器上的许多数据库中,所有数据都在 postgres 表中。从任何给定的服务器/数据库,我可能需要查询另一个服务器/数据库。查询非常基本,标准选择在标准字段上使用 where 子句。
我目前已经实现了 postgres_FDW,(我使用的是 postgres 9.5),但我认为查询没有使用远程数据库上的索引。对于这个用例(一个随机节点可能会查询 N 个其他节点),根据每个底层引擎的实际执行方式,这可能是我的最佳性能选择?
postgres-fdw ×10
postgresql ×8
amazon-rds ×1
camunda ×1
dblink ×1
indexing ×1
mongodb ×1
spring-boot ×1
ssh-tunnel ×1