我需要在当前架构搜索路径中找到所有可见表。我试过了:
SELECT *
FROM pg_tables
AND schemaname IN (SHOW search_path)
但错误的是:
PGError: ERROR: syntax error at or near "search_path"
LINE 3: AND schemaname IN (SHOW search_path)
答案 0 :(得分:3)
您可以使用CURRENT_SCHEMAS()
函数获取当前架构。它将为您解析搜索路径中的所有引用(例如$user
)
SELECT * FROM pg_tables WHERE schemaname = ANY (CURRENT_SCHEMAS(false));
您还可以使用更标准的information_schema伪模式。
SELECT * FROM information_schema.tables WHERE table_schema = ANY (CURRENT_SCHEMAS(false));
答案 1 :(得分:3)
为此目的提供了pg_*_is_visible()
个函数集。以下是使用它们的一种方法:
SELECT * FROM pg_class WHERE relkind IN ('r', 'v') AND pg_table_is_visible(oid);