私はユーザーを持っています:postgresql上のデータベースを所有し、(CREATE_DB、SUPERUSER、...)のようなROLE属性を持たないuser_x
このuser_xは、DB全体にアクセスし、(彼のデータベースに)テーブルを作成し、データを選択、挿入、および更新できます。
私はこのデータベースのリストを持っています:
mydatabase=> \l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-------------------------+----------+-----------+-----------+-------+-----------------------
postgres | postgres | SQL_ASCII | C | C |
mydatabase | user_x | UTF8 | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
whoami | postgres | SQL_ASCII | C | C |
(6 rows)
および次の役割:
mydatabase=> \du
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
user_x | | {}
mydatabase=> \d
List of relations
Schema | Name | Type | Owner
--------+-----------------------------------+----------+----------
public | addresses | table | user_x
public | addresses_id_seq | sequence | user_x
public | assignments | table | user_x
public | assignments_id_seq | sequence | user_x
...
データをダンプして別のpostgresqlサーバーに復元するまでは。
別のサーバー(同じデータベース名とユーザー)にデータをインポートし、psqlにログオンした後、\ dコマンドの応答:"No Relations found。"
そのため、インポートしたデータベースサーバーのuser_xに[〜#〜] superuser [〜#〜]ロールを追加すると、tadãuser_xが関係とデータを再び表示できるようになります。
ただし、user_xは、このデータベースにアクセスするためにSUPERUSER特権を持っている必要はありません。
このインポートされたダンプの何が問題になっていますか?これを解決する方法はありますか?
おそらく、public
スキーマのスキーマ権限が壊されました。両方のサイトでの\dn+
の出力は何ですか?
出力は次のようになります。
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres | standard public schema
: =UC/postgres
(1 row)
=UC/postgres
の部分が欠落している場合は、
grant all on schema public to public;