我有很多IMPORT FOREIGN SCHEMA
导入的外来表:
CREATE USER MAPPING FOR myuser
SERVER postgres
OPTIONS ( user 'myuser', password 'mypass');
IMPORT FOREIGN SCHEMA public from server postgres INTO public;
我有许多查询加入我的本地表和外部表。
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');
在外表上使用pg_prewarm
没有意义:由于该表未存储在PostgreSQL中,PostgreSQL无法将其加载到共享缓冲区或文件系统缓存中。
事实上,这样做的尝试将导致
ERROR: fork "main" does not exist for this relation
若要加快涉及外部表的查询,必须获取外部数据源以将数据缓存在内存中。