我正试图将整个 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文件中进行还原。
当运行脚本时,我得到这个错误。(已安装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实例时重新创建。
可能让你困惑的是,被拒绝的权限不是操作系统的权限,而是数据库的权限。
使用的数据库用户是 pg_dump
是 <pg_user>
,而该数据库用户显然并不具备 SELECT
桌上的特权 public.us_lex
.