pg_relation_is_publishable() 是一个系统函数,用于确定一个关系(relation)是否可以成为 发布对象(publication) 的一部分。
pg_relation_is_publishable() 在 PostgreSQL 10 中被添加。
用法
pg_relation_is_publishable (regclass) →boolean
如果该关系是一个非 系统目录(system catalog)、非临时表(temporary table)或 分区表(partitioned table),则返回 true,否则返回 false。
如果提供的 OID 与任何关系都不匹配,则返回 NULL。
pg_relation_is_publishable() 用于检查与关系关联的 发布对象(publications)。虽然它是为 psql 而创建的,但对于显示关系元数据的其他客户端也可能有用。
截至 PostgreSQL 15,pg_relation_is_publishable() 并未被文档记录。
变更历史
- PostgreSQL 10
- 添加于(提交 a2141c42)
示例
基于 psql 使用的查询,pg_relation_is_publishable() 的用法示例
postgres=# SELECT pubname, NULL, NULL
FROM pg_publication p
JOIN pg_publication_namespace pn ON p.oid = pn.pnpubid
JOIN pg_class pc ON pc.relnamespace = pn.pnnspid
WHERE pc.oid ='foo'::regclass and pg_relation_is_publishable('foo')
UNION
SELECT pubname,
pg_get_expr(pr.prqual, c.oid),
(CASE WHEN pr.prattrs IS NOT NULL THEN
(SELECT string_agg(attname, ', ')
FROM generate_series(0, array_upper(pr.prattrs::int2[], 1)) s,
pg_attribute
WHERE attrelid = pr.prrelid AND attnum = prattrs[s])
ELSE NULL END) FROM pg_publication p
JOIN pg_publication_rel pr ON p.oid = pr.prpubid
JOIN pg_class c ON c.oid = pr.prrelid
WHERE pr.prrelid = 'foo'::regclass
UNION
SELECT pubname, NULL, NULL
FROM pg_publication p
WHERE p.puballtables AND pg_relation_is_publishable('foo')
ORDER BY 1;
pubname | ?column? | ?column?
----------+----------+----------
test_pub | |
(1 row)
