【问题标题】:What causes this error message when using the postgres pg_dump command?使用 postgres pg_dump 命令时出现此错误消息的原因是什么?
【发布时间】:2020-04-24 23:05:10
【问题描述】:

我正在尝试从托管在 GCP/GCE 实例 (RHEL 8.x VM) 上转储整个 PG 数据库。

目的是将 .sql 文件传输到 GCE 上的另一个 RHEL 8.x VM 并恢复数据库。


我以操作系统用户 '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 实例来重新创建。

【问题讨论】:

    标签: postgresql google-compute-engine rhel pg-dump


    【解决方案1】:

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

    pg_dump使用的数据库用户是&lt;pg_user&gt;,而该数据库用户显然没有SELECTpublic.us_lex的权限。

    【讨论】:

    • 好的,完美,这就是问题所在,我错过了在脚本中将其更改为“postgres”。谢谢!
    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多