postgresql - 对外部表使用 PostgreSQL pg_prewarm

标签 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');

最佳答案

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

确实,尝试这样做会导致

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

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

关于postgresql - 对外部表使用 PostgreSQL pg_prewarm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52830144/

相关文章:

sql - Spring Data jpa插入多个表以避免锁表

postgresql - 我可以为外部表更改 SERVER 吗?

PostgreSQL - 创建外表时如何导入自定义数据类型(使用 postgres-fdw)?

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

sql - 如何使用 postgres dblink 更新另一个数据库中的表?

linux - 为什么 PostgreSQL 在执行长时间运行的 INSERT … SELECT … 时不保存到磁盘?

MySQL 到 Postgres 按错误分组

java - 为什么我必须在 maven 项目中手动为 sql db 定义驱动程序

sql - 获取 child 关系的计数和 child 的 child 的计数

postgresql - 我可以声明一个接受任何类型数组的 postgres 函数吗?