如何在 postgresql 中更改所有视图的所有者
Posted
技术标签:
【中文标题】如何在 postgresql 中更改所有视图的所有者【英文标题】:how to alter all view's owner in postgresql 【发布时间】:2014-09-15 05:18:33 【问题描述】:在postgresql-9.2 database 中存储有125
views。其中 75 个 views owner 是sa
.
那么,我有什么方法可以改变 view's 拥有 owner sa
到 postgres
.? p>
【问题讨论】:
【参考方案1】:查找与所有者关联的视图sa
select
viewname
from
pg_catalog.pg_views
where
schemaname NOT IN ('pg_catalog', 'information_schema')
and
viewowner = 'sa'
我们可以使用 ALTER
视图的所有者:ALTER VIEW <view_name> OWNER TO <owner_name>
根据文档:
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
最后,要找出与所有者 sa
和 ALTER
关联的视图,请使用以下命令
do $$
declare
myrow record;
begin
for myrow in
select
'ALTER VIEW '||quote_ident(v.viewname)||' OWNER TO "postgres";' as viewq
from
(select
viewname
from
pg_catalog.pg_views
where
schemaname NOT IN ('pg_catalog', 'information_schema')
and
viewowner = 'sa'
) v
loop
execute myrow.viewq;
end loop;
end;
$$;
【讨论】:
嗨,我对 pl/sql 完全陌生。快速搜索后,我在 pl/sql 中找不到类型“记录”。而且括号后面的“v”似乎是一个缩写。这种语法叫什么?我想搜索它并学习如何在其他情况下使用它。谢谢! @kumom 当你提到 PostgreSQL 搜索 pl/pgsql。 Refer declaration from here。v
是我给子选择 select viewname from pg_catalog.pg_views where schemaname NOT IN ('pg_catalog', 'information_schema') and viewowner = 'sa'
的别名【参考方案2】:
要更改所有 sa 拥有的对象,您可以使用Reassign Owned。
要更改单个视图,您可以使用Alter View。
您应该能够在第二个链接中编写该过程的脚本
【讨论】:
其实这不是我想要的以上是关于如何在 postgresql 中更改所有视图的所有者的主要内容,如果未能解决你的问题,请参考以下文章
如何一次刷新 Postgresql 9.3 中的所有物化视图?