Sea*_*ean 27 postgresql materialized-view information-schema postgresql-9.4
我想知道如何在 Postgres 中查询物化视图的定义。作为参考,我希望做的与您可以为常规视图做的非常相似:
SELECT * FROM information_schema.views WHERE table_name = 'some_view';
Run Code Online (Sandbox Code Playgroud)
它为您提供以下列:
table_catalog
table_schema
table_name
view_definition
check_option
is_updatable
is_insertable_into
is_trigger_updatable
is_trigger_deletable
is_trigger_insertable_into
Run Code Online (Sandbox Code Playgroud)
这对于物化视图是可能的吗?
从我目前的研究来看,物化视图似乎被故意排除在 information_schema 之外,因为
information_schema 只能显示存在于 SQL 标准中的对象。
( http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us )
由于它们似乎完全被排除在 information_schema 之外,我不知道如何解决这个问题,但我想做的是双重的:
view_definition
列information_schema.views
)。小智 35
看起来像 9.3 及更高版本,您可以执行以下操作:
select * from pg_matviews;
select * from pg_matviews where matviewname = 'view_name';
Run Code Online (Sandbox Code Playgroud)
在这里找到更多信息:https : //stackoverflow.com/questions/29297296/postgres-see-query-used-to-create-materialized-view
Sea*_*ean 14
原来这并没有我想象的那么复杂!(只需要一点 pg_catalog 的知识......)
SELECT count(*) > 0
FROM pg_catalog.pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'm'
AND n.nspname = 'some_schema'
AND c.relname = 'some_mat_view';
Run Code Online (Sandbox Code Playgroud)
好,易于。
为了提出查询以获取 mat 视图的定义,我首先必须information_schema.views
通过运行来查找视图的定义:
SELECT view_definition
FROM information_schema.views
WHERE table_schema = 'information_schema'
AND table_name = 'views';
Run Code Online (Sandbox Code Playgroud)
然后我复制了查询并更改c.relkind = 'v'::"char"
为c.relkind = 'm'::"char"
以获取 mat 视图(而不是常规视图)。在此处查看完整查询:http : //pastebin.com/p60xwfes
此时,您可以非常轻松地添加AND c.relname = 'some_mat_view'
并运行它以获取some_mat_view
.
但是下次要查找 mat 视图的定义时,您仍然必须重新执行此操作...
我选择创建一个新视图,以便将来更轻松地查找 mat 视图定义。我基本上只是添加CREATE VIEW materialized_views AS
到上面链接的查询的开头来创建新视图,现在我可以像这样查询它:
SELECT *
FROM materialized_views
WHERE table_schema = 'some_schema'
AND table_name = 'some_mat_view';
Run Code Online (Sandbox Code Playgroud)
好多了!
我还可以使用此视图通过更改*
为来轻松查询物化视图是否存在count(*) > 0
。
免责声明:我不知道查询结果中的其他列是否完全正确,因为物化视图从根本上不同于标准视图(我认为它们是正确的)。但这至少可以查询table_schema
,table_name
并且view_definition
正确。
归档时间: |
|
查看次数: |
29986 次 |
最近记录: |