如何将数据库中某些表的所有权从postgres更改为另一个用户?

问题描述 投票:1回答:1

我有一个包含大量表的数据库。有些表归postgres用户所有,而不是我创建的。我想将此类表的所有权转让给我创建的表,因为进行django-migrations时,您只能为psql连接设置一个用户和密码,而该用户无权访问postgres用户拥有的表,因此迁移尚未完成。

到目前为止,谷歌搜索并没有帮助,因为他们建议使用ALTERREASSIGN OWNED来更改数据库或表的所有权。但是问题在于,这些表不能更改某些表的所有权,因为它们必须由postgres拥有。我可以通过一张一张一张地选择每个表来手动更改所有权,但是当尝试一起做时,出现一个错误,提示

"ERROR: cannot reassign ownership of objects owned by role postgres because they are required by the database system"

手动更改一百多个表不是一种选择。有人对此问题有任何解决方法吗?

django postgresql psql django-migrations
1个回答
1
投票

您是否尝试过使用anonymous code block?下面的代码块从模式anonymous code block中选择属于用户public的所有表,并将所有权设置为用户postgres

user

请记住,此操作将修改属于给定用户的架构中所有表的所有权。显然,您可以通过更改循环中的DO $$ DECLARE row RECORD; BEGIN FOR row IN SELECT * FROM pg_tables WHERE schemaname = 'public' AND tableowner = 'postgres' LOOP EXECUTE 'ALTER TABLE ' || row.tablename || ' OWNER TO user'; END LOOP; END; $$; 查询来进一步过滤这些表。看一下:

pg_tables

请小心使用!

© www.soinside.com 2019 - 2024. All rights reserved.