当使用 postgres pg_dump 命令时,是什么原因导致了这个错误信息?

问题描述 投票:1回答:1

我正试图将整个 PG 数据库从 GCPGCE 实例(RHEL 8.x 虚拟机)的主机上转储。

目的是将.sql文件转移到GCE上的另一个RHEL 8.x虚拟机上,然后恢复数据库。


我是以操作系统用户的身份运行这个脚本的 '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.

我需要添加什么权限(fullexact命令),添加什么权限都可以?

或者说我怎么能排除这个表? 我想我不需要它,而且它将在安装一个新的Postgres实例时重新创建。

postgresql google-compute-engine rhel pg-dump
1个回答
2
投票

可能让你困惑的是,被拒绝的权限不是操作系统的权限,而是数据库的权限。

使用的数据库用户是 pg_dump<pg_user>,而该数据库用户显然并不具备 SELECT 桌上的特权 public.us_lex.

© www.soinside.com 2019 - 2024. All rights reserved.