[英]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.