我想创建一个数据库ABC。我想使用转储文件ABC_DUMP将数据加载到ABC中。我希望用户ABC_USER对数据库ABC具有所有访问权限,包括创建,选择,更改,更新。 我使用:
登录psqlpostgres@ubuntu:~$ psql
postgres=# CREATE DATABASE ABC;
postgres=# GRANT ALL PRIVELEGES ON DATABASE ABC TO ABC_USER;
postgres=# \q
postgres@ubuntu:~$ psql -h localhost ABC -U ABC_USER < ABC_DUMP
Password for user ABC_USER xxxxxx
CREATE FUNCTION
ERROR: must be member of role "postgres"
CREATE FUNCTION
ERROR: must be member of role "postgres"
CREATE FUNCTION
ERROR: must be member of role "postgres"
CREATE FUNCTION
ERROR: must be member of role "postgres"
CREATE AGGREGATE
ERROR: must be member of role "postgres"
SET
SET
CREATE TABLE
ERROR: must be member of role "postgres"
CREATE TABLE
ERROR: must be member of role "postgres"
CREATE SEQUENCE
ERROR: must be member of role "postgres"
ALTER SEQUENCE
CREATE SEQUENCE
ERROR: must be member of role "postgres"
...
如何避免这些错误? 我已尝试将架构公共的所有权限提供给用户ABC_USER,但我仍然遇到错误。
角色名称:ABC_USER,角色属性列表 - 创建DB,创建角色
角色名称:Postgres,角色属性列表 - 超级用户,创建角色,创建数据库,复制,绕过RLS
使用postgres版本9.5.6
答案 0 :(得分:3)
问题在于转储文件。它有所有者设置,所以我无法使用用户ABC_USER转储数据。我创建了另一个转储文件,但这次使用--no-owner
标志并使用了该转储文件并且它有效。
pg_dump ABC -no-owner > ABC_DUMP