我正在编写查询,这些查询跨数据库和模式读取相同的表,我需要这些列来包含一行来自哪个模式和表。
在创建这篇文章的过程中进行搜索时,我遇到了这个答案
SELECT u.*, n.nspname as schema, u.tableoid::regclass::text as table_or_view
FROM uses u
JOIN pg_class c ON c.oid = u.tableoid
JOIN pg_namespace n ON c.relnamespace = n.oid
这现在包括架构和表或视图。
我现在还需要什么连接来添加数据库?
也许这可以帮助:
使用提供的 mustaccio获取数据库名称
current_database()
。您的列别名“table_or_view”表明您也计划将其用于视图,但
VIEW
没有tableoid
. (s 除外MATERIALIZED VIEW
,它是围绕实际物理表而不是普通视图构建的。)如果您无论如何都要加入,直接输出比强制转换
pg_class
更有意义:pg_class.relname
tableoid
如果这只是用于表(而不是视图),您可以使用
u.tableoid::regclass::text
. 而且您不需要连接到更多表。如果当前模式搜索路径
search_path
需要输出,则输出仅是模式限定的。要始终输出模式名称,请search_path
为查询设置一个空值。但是你必须对你的表进行模式限定才能找到它:您将希望保持当前的
search_path
. 您可以在查询后重置它。而只是在本地设置它以便查询开始:手册: