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

Цель состоит в том, чтобы перенести файл .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.

2
user10664542 24 Апр 2020 в 10:13

1 ответ

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

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

2
Laurenz Albe 24 Апр 2020 в 10:53
Хорошо, отлично, это была проблема, я пропустил изменение этого на «postgres» в сценарии. Спасибо!
 – 
user10664542
24 Апр 2020 в 18:03