Что вызывает это сообщение об ошибке при использовании команды postgres pg_dump? - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь выгрузить всю базу данных PG с хостинга на экземпляре GCP / GCE (виртуальная машина RHEL 8.x).

Цель - перенести файл. sql в другой RHEL 8. x ВМ на GCE и восстановление базы данных.


Я запускаю этот скрипт как пользователь ОС 'postgres'

#!/bin/bash
clear

export PGUSER=<pg_user>
export PG_DATABASE=<pg_db>
export PGHOSTADDR=<pg_ip_addr>
export PGPORT=5432
SQL_FILE=<pg_db>.sql

export PGPASSWORD=<passwd>

pg_dump \
        --format plain \
        --no-owner \
        --verbose \
        --file $SQL_FILE \
        $PG_DATABASE

Если есть что-то еще рекомендуется в сценарии вывести базу данных в файл. sql для восстановления:

  1. все, что рекомендуется добавить в сценарий,
  2. или любой способ улучшить сценарий, который вы в курсе), пожалуйста, сообщите.

Я получаю эту ошибку при запуске сценария: (установлен PostGIS)

pg_dump: last built-in OID is 16383
pg_dump: reading extensions
pg_dump: identifying extension members
pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: error: query failed: ERROR:  permission denied for table us_lex
pg_dump: error: query was: LOCK TABLE public.us_lex IN ACCESS SHARE MODE

Почему в работе разрешено отказывать Пользователь ОС postgres.

Какое разрешение мне нужно добавить (полная / точная команда), чтобы добавить необходимые разрешения?

Или как я могу исключить эту таблицу? Я не думаю, что мне это нужно, и он будет воссоздан с установкой нового Postgres экземпляра.

1 Ответ

2 голосов
/ 24 апреля 2020

Вероятно, вас смущает то, что отказанные разрешения - это не разрешения операционной системы, а разрешения базы данных.

Пользователь базы данных, используемый для pg_dump, равен <pg_user>, и этот пользователь базы данных, очевидно, не имеет SELECT привилегия на таблицу public.us_lex.

...