我创建了一个外部表urltrackerft
在我的外国服务器中util它有表urltracker:


我已按照此处创建外部服务器和表的步骤操作: https://www.postgresql.org/docs/current/postgres-fdw.html
我的创建脚本看起来像这样:
CREATE FOREIGN TABLE urltrackerft (
id numeric NOT NULL,
...
) SERVER util
OPTIONS (schema_name 'util', table_name 'urltracker');
Run Code Online (Sandbox Code Playgroud)
但是当我尝试读取该urltrackerft表时,我收到此错误消息:

在我看来,外部服务器可能没有完全同步。
检查用户映射,信息看起来正确,是否主机不是IP而是DNS?

对于其中一台服务器来说,firewall或 可能不正确。但我在主服务器中hba_conf看到了外部服务器。util我对此有点迷失。任何帮助表示赞赏,谢谢!
主服务器在 PostgreSQL v10 上,外部服务器在 PostgreSQL v11 上。
我已连接到架构“ APM”
尝试执行功能并出现以下错误:
ERROR: user mapping not found for "postgres"
数据库连接信息说:postgres @ PostgreSQL 9.6上的apm
psql版本:PostgreSQL 9.6.3,由Visual C ++ build 1800编译,64位
如何解决此错误。谢谢。
我的问题是我正在使用 PostgreSQL 数据库并想导入一个vfm从其他数据库命名的表,比如B. 但是在我当前的数据库 ( A)中有一个同名 table 的表。我在查询中遇到错误,说关系已经存在。
我想知道是否有办法将外部模式导入具有其他名称的表中,或者(最好)我们是否可以直接查询其他数据库而无需将外部模式导入 PostgreSQL?
我一直无法为此找到完美的解决方案。
database postgresql foreign-data-wrapper postgres-fdw postgresql-9.4
我正在使用两个PostgreSQL 9.6数据库,正在尝试使用postgres_fdw从另一个数据库中查询一个数据库(一个是具有数据的生产备份DB,另一个是用于进行各种分析的数据库)。
我遇到了一些奇怪的行为,尽管查询中的某些类型的WHERE子句没有传递到远程数据库,而是保留在本地数据库中,并用于过滤从远程数据库接收的结果。这导致远程数据库尝试通过网络发送比本地数据库所需更多的信息,并且受影响的查询速度大大降低(15秒对15分钟)。
我主要通过与时间戳相关的子句看到了这一点,下面的示例是我第一次遇到此问题的方式,但是我在其他几种变体中也看到了它,例如用TIMESTAMP文字(慢速)替换CURRENT_TIMESTAMP或用TIME ZONE文字替换TIMESTAMP (快速)。
我缺少某个地方的设置可以对此有所帮助吗?我将其设置为团队使用混合级别的SQL背景,大多数人都不具备审查EXPLAIN计划之类的经验。我已经提出了一些解决方法(例如将相对时间子句放在sub-SELECT中),但是我不断遇到新的问题实例。
一个例子:
SELECT var_1
,var_2
FROM schema_A.table_A
WHERE execution_ts <= CURRENT_TIMESTAMP - INTERVAL '1 hour'
AND execution_ts >= CURRENT_TIMESTAMP - INTERVAL '1 week' - INTERVAL '1 hour'
ORDER BY var_1
Run Code Online (Sandbox Code Playgroud)
解释计划
Sort (cost=147.64..147.64 rows=1 width=1048)
Output: table_A.var_1, table_A.var_2
Sort Key: (table_A.var_1)::text
-> Foreign Scan on schema_A.table_A (cost=100.00..147.63 rows=1 width=1048)
Output: table_A.var_1, table_A.var_2
Filter: ((table_A.execution_ts <= (now() - '01:00:00'::interval))
AND (table_A.execution_ts >= ((now() - '7 days'::interval) - '01:00:00'::interval)))
Remote SQL: SELECT var_1, execution_ts FROM model.table_A …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用外部数据包装器将其他两个 Postgres 数据库插入到 Postgres 数据库中的表中。目标是拥有一个独立于源的自动生成主键,因为将有两个以上的主键。
\n我首先像这样定义表:
\ncreate table dummy (\n dummy_pk bigserial primary key\n -- other fields\n);\nRun Code Online (Sandbox Code Playgroud)\ncreate foreign table dummy (\n dummy_pk bigserial\n -- other fields\n) server ... ;\nRun Code Online (Sandbox Code Playgroud)\n只要我仅从一个源插入,此解决方案就可以正常工作,当我尝试从另一个源插入而不指定 dummy_pk 时,我收到以下消息:
\n\n\n重复密钥 (dummy_pk)=(1)
\n
因为 postgres 尝试插入 id 1,所以我相信每个源外部表使用的序列是不同的。我对源表做了一些更改,试图让目标表的序列完成 id 的工作:
\ncreate foreign table dummy (\n dummy_pk bigint\n -- other fields\n) server ... ;\nRun Code Online (Sandbox Code Playgroud)\n这次我遇到了不同的错误:
\n\nNULL 值违反列 \xc2\xab dummy_pk \xc2\xbb 上的 NOT NULL …
我有很多进口的外国表IMPORT FOREIGN SCHEMA:
CREATE USER MAPPING FOR myuser
SERVER postgres
OPTIONS ( user 'myuser', password 'mypass');
IMPORT FOREIGN SCHEMA public from server postgres INTO public;
Run Code Online (Sandbox Code Playgroud)
我有很多查询加入了我的本地表和外部表。
Q1:如果我使用pg_prewarm并把整个表放在内存中,不是每次都通过网络取这张表对我有帮助。
Q2:我担心如果外部表被缓存,外部 PostgreSQL 服务器上的数据更改是否会在我的本地服务器上可见。
示例:core_category是一个外部表
SELECT pg_prewarm(
'core_category',
-- "pre warm" pages of the last 1000 pages for 'mytable'
first_block := (
SELECT pg_relation_size('core_category') / current_setting('block_size')::int4 - 1000
)
);
-- or
SELECT * FROM pg_prewarm('core_category', 'buffer');
Run Code Online (Sandbox Code Playgroud) 我有一组应用程序访问同一服务器上的两个不同的 PostgreSQL 9.6 DB。由于某些应用程序限制,一个应用程序通过 FDW 访问一个数据库中的少数表到另一个数据库。
像这样的事情:
DB1.fdw_table_a->DB2.table_a
fdw_table_a仅用于插入日志数据。该表有一id列,它是一个bigint序列。该序列存在于 DB1(外部表)和 DB2(“真实”表)中。这一切正常。
现在需要让另一个应用程序(同样具有有限的访问能力)执行对“真实”表的插入DB2.table_a。在测试中,我可以看到该列中存在一些不一致的地方id,但没有出现明显的问题。
我可以看到在面向客户的环境中,DB1 FDW 序列按预期使用,但是当直接在 DB2“真实”表上开始插入时,该序列将从 1 开始(因为它从未使用过)。
在这种环境下我们还应该考虑其他事情吗?插入到表中的这两个序列重叠是否可能会出现一些问题?