簡體   English   中英

雲 SQL - PostgreSQL - 由於缺少超級用戶權限,導入失敗

[英]Cloud SQL - PostgreSQL - Import failed due to the lack of superuser permission

我正在通過生成轉儲文件將所有角色從托管在 GCE VM 中的 PostgreSQL 遷移到雲 SQL

sudo -Hu postgres pg_dumpall -U postgres --globals-only --file=globals.sql

當我在 Cloud SQL 中導入相同的(globals.sql)時,我遇到了以下錯誤:

exit status 3 SET SET SET CREATE ROLE ERROR: must be superuser to alter superusers

注意:我使用postgres用戶將此轉儲文件導入雲 sql 數據庫。

我很好奇有沒有其他方法可以解決這個問題,因為 postgres 用戶沒有超級用戶權限?

我嘗試使用雲 shell 從 globals.sql 文件中執行一個查詢,下面是 output:

postgres=> CREATE ROLE vipinm;
CREATE ROLE
postgres=> ALTER ROLE vipinm WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS;
ERROR:  must be superuser to alter superusers

提前致謝!

psql文檔說:

psql returns 0 to the shell if it finished normally, 1 if a fatal error of its own occurs (eg, out of memory, file not found), 2 if the connection to the server went bad and the session was not interactive, and 3如果腳本中發生錯誤並且設置了變量ON_ERROR_STOP

所以不要設置ON_ERROR_STOP

該錯誤意味着您無法從轉儲中執行以下行:

ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS;

這很好,您可以忽略該錯誤。

這是一個錯誤。 作為非超級用戶,您甚至不能重申另一個角色仍然不是超級用戶,因為即使提及有關超級用戶的任何內容,即使它沒有任何效果也會引發錯誤。 您可以通過在其最終 state 中創建角色來解決此問題,而不是執行 pg_dump 喜歡執行的 CREATE 然后 ALTER 舞蹈。

 CREATE ROLE vipinm WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS;

或者,您可以從 ALTER 語句中刪除所有不會導致任何更改的屬性,而只是重申當前的 state 事物,留下:

 ALTER ROLE vipinm WITH LOGIN;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM