Cloud SQL - PostgreSQL - сбой импорта из-за отсутствия прав суперпользователя

Я переношу всю роль из моего PostgreSQL, размещенного на виртуальной машине GCE, в Cloud SQL, создав файл дампа.

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

Когда я импортирую то же самое (globals.sql) в Cloud SQL, я обнаружил следующую ошибку:

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

Примечание. Я использовал пользователя postgres для импорта этого файла дампа в облачную базу данных sql.

Мне любопытно, есть ли другой способ решить эту проблему, поскольку у пользователя postgres нет привилегий суперпользователя?

Я попытался выполнить один запрос из файла globals.sql с помощью облачной оболочки, ниже приведен результат:

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

Заранее спасибо!


person Vipin    schedule 11.03.2021    source источник


Ответы (2)


В psql документации говорится:

psql возвращает оболочке 0, если она завершилась нормально, 1, если произошла собственная фатальная ошибка (например, нехватка памяти, файл не найден), 2, если соединение с сервером ухудшилось и сеанс не был интерактивным, и 3 если в скрипте произошла ошибка и была установлена ​​переменная ON_ERROR_STOP.

Так что не устанавливайте ON_ERROR_STOP.

Ошибка означает, что вы не можете выполнить следующую строку из своего дампа:

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

Это нормально, и вы можете проигнорировать ошибку.

person Laurenz Albe    schedule 11.03.2021
comment
Спасибо за ответ! Я попытался выполнить запрос в облачной оболочке, результат ниже: В моем случае пользователь - NOSUPERUSER postgres = ›CREATE ROLE vipinm; СОЗДАТЬ РОЛЬ postgres = ›ИЗМЕНИТЬ РОЛЬ vipinm С NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS; ОШИБКА: для изменения суперпользователей должен быть суперпользователем - person Vipin; 11.03.2021
comment
Просто скажите psql игнорировать ошибку. - person Laurenz Albe; 11.03.2021

Это своего рода ошибка. Как не суперпользователь, вы не можете даже повторить, что другая роль по-прежнему не является суперпользователем, поскольку даже упоминание чего-либо о суперпользователях, даже если это не будет иметь никакого эффекта, вызывает ошибку. Вы можете обойти это, создав роль в ее конечном состоянии, вместо того, чтобы выполнять танец CREATE, а затем ALTER, который любит делать pg_dump.

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

В качестве альтернативы вы можете удалить из оператора ALTER все атрибуты, которые не вызывают никаких изменений, а просто повторяют текущее состояние вещей, оставив:

 ALTER ROLE vipinm WITH LOGIN;
person jjanes    schedule 11.03.2021