标签: postgres-fdw

PostgreSQL 外部表错误关系不存在

我创建了一个外部表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 上。

postgresql postgres-fdw

4
推荐指数
1
解决办法
1944
查看次数

Postgres:找不到“ postgres”的用户映射

我已连接到架构“ APM”

尝试执行功能并出现以下错误:

ERROR: user mapping not found for "postgres"

数据库连接信息说:postgres @ PostgreSQL 9.6上的apm

psql版本:PostgreSQL 9.6.3,由Visual C ++ build 1800编译,64位

如何解决此错误。谢谢。

sql mapping postgresql postgres-fdw

3
推荐指数
3
解决办法
7177
查看次数

外部表可以与本地表同名吗?

我的问题是我正在使用 PostgreSQL 数据库并想导入一个vfm从其他数据库命名的表,比如B. 但是在我当前的数据库 ( A)中有一个同名 table 的表。我在查询中遇到错误,说关系已经存在。

我想知道是否有办法将外部模式导入具有其他名称的表中,或者(最好)我们是否可以直接查询其他数据库而无需将外部模式导入 PostgreSQL?

我一直无法为此找到完美的解决方案。

database postgresql foreign-data-wrapper postgres-fdw postgresql-9.4

3
推荐指数
1
解决办法
1453
查看次数

Postgres_FDW不降低WHERE标准

我正在使用两个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)

postgresql postgres-fdw postgres-9.6

3
推荐指数
1
解决办法
260
查看次数

当使用多个远程 fdw 源进行插入时,Postgres BIGSERIAL 不共享序列

我正在尝试使用外部数据包装器将其他两个 Postgres 数据库插入到 Postgres 数据库中的表中。目标是拥有一个独立于源的自动生成主键,因为将有两个以上的主键。

\n

我首先像这样定义表:

\n

目标数据库:

\n
create table dummy (\n  dummy_pk bigserial primary key\n  -- other fields\n);\n
Run Code Online (Sandbox Code Playgroud)\n

来源数据库:

\n
create foreign table dummy (\n  dummy_pk bigserial\n  -- other fields\n) server ... ;\n
Run Code Online (Sandbox Code Playgroud)\n

只要我仅从一个源插入,此解决方案就可以正常工作,当我尝试从另一个源插入而不指定 dummy_pk 时,我收到以下消息:

\n
\n

重复密钥 (dummy_pk)=(1)

\n
\n

因为 postgres 尝试插入 id 1,所以我相信每个源外部表使用的序列是不同的。我对源表做了一些更改,试图让目标表的序列完成 id 的工作:

\n
create foreign table dummy (\n  dummy_pk bigint\n  -- other fields\n) server ... ;\n
Run Code Online (Sandbox Code Playgroud)\n

这次我遇到了不同的错误:

\n
\n

NULL 值违反列 \xc2\xab dummy_pk \xc2\xbb 上的 NOT NULL …

sql postgresql primary-key postgres-fdw

3
推荐指数
1
解决办法
722
查看次数

将 PostgreSQL pg_prewarm 用于外部表

我有很多进口的外国表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 postgres-fdw

2
推荐指数
1
解决办法
636
查看次数

外部表插入不使用远程序列

我有一组应用程序访问同一服务器上的两个不同的 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 开始(因为它从未使用过)。

在这种环境下我们还应该考虑其他事情吗?插入到表中的这两个序列重叠是否可能会出现一些问题?

postgresql postgres-fdw postgresql-9.6

1
推荐指数
1
解决办法
3009
查看次数