如何在 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 ownersa.

那么,我有什么方法可以改变 view's 拥有 owner sapostgres.? 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 [, ... ] )

最后,要找出与所有者 saALTER 关联的视图,请使用以下命令

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 数据库的所有者?

如何一次刷新 Postgresql 9.3 中的所有物化视图?

如何在一次操作中更改多个 PostgreSQL 表的架构?

如何更改 MSSQL 中所有表、视图和存储过程的架构

Postgresql:更改所有者对象时出现错误“必须是关系的所有者”

从一个视图控制器更改项目中所有视图的背景颜色?