postgresql - Postgres 获取足够的视图信息来重现它
问题描述
基本上 - 我想从 postgres 中获取足够的信息来重现一个视图 - 我知道我可以做一个
select * from pg_get_viewdef('my_view')
这让我得到了 select 语句,但不是它的create部分——它可以是普通视图或物化视图——然后可以授予和物化视图索引。
我知道我可以自己完成所有这些工作,但我可能会弄错或遗漏一些东西 - 在 postgres 中是否有更简单的方法?即我可以得到的东西给我完整的 ddl 来重建视图?
解决方案
获取语CREATE VIEW
句和所有GRANT
s 的最简单方法是运行pg_dump
:
pg_dump -t viewschema.viewname dbname
如果您不能使用它,则收集信息会更加困难:
我建议您使用视图
pg_views
和pg_matviews
. 它们包含一列definition
,其中包含 的结果pg_get_viewdef
。只需在完整的语句前面加上CREATE VIEW
或CREATE MATERIALIZED VIEW
。可以方便地从 获取视图的权限
information_schema.table_privileges
,但此视图不包含物化视图。要直接从元数据中获取权限,您可以使用:
SELECT c.oid::regclass AS table_or_view p.grantor::regrole, p.grantee::regrole, p.privilege_type, p.is_grantable FROM pg_class AS c CROSS JOIN LATERAL aclexplode(c.relacl) AS p WHERE c.relname = 'v';
在这里, a
-
asgrantee
表示PUBLIC
。
推荐阅读
- python - 如何获取帐户创建年龄 discord.py
- .htaccess - htaccess / mod_rewrite 命令用于创建硬编码的永久链接
- c# - 在 C# 中编写多线程映射 IEnumerator
- iis - IIS 请求过滤问题
- docker - 在停止的 tomcat docker 容器中调试
- r - 折叠行以删除 NA
- matrix - Gnuplot - 无法正确绘制两个不同大小的矩阵
- html - Using "property" in HTML meta data with kotlin DSL
- node.js - Mongoose 聚合 $match 中的多个动态字段
- javascript - 如何只允许使用 navigator.mediaDevices.getDisplayMedia 进行显示捕获