将PostgreSQL pg_prewarm用于外部表

时间:2018-10-16 07:32:30

标签: postgresql postgres-fdw

我有许多由IMPORT FOREIGN SCHEMA导入的外国表:

CREATE USER MAPPING FOR myuser
   SERVER postgres
   OPTIONS ( user 'myuser', password 'mypass');
IMPORT FOREIGN SCHEMA public from server postgres INTO public;

我有很多查询将我的本地表和外部表连接起来。

问题1:如果我使用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');

1 个答案:

答案 0 :(得分:3)

在外部表上使用pg_prewarm没有意义:由于该表未存储在PostgreSQL中,因此PostgreSQL无法将其加载到共享缓冲区或文件系统缓存中。

实际上,尝试这样做会导致

ERROR: fork "main" does not exist for this relation

要加快涉及外部表的查询,您必须获取外部数据源才能将数据缓存在内存中。