32

私はユーザーを持っています: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コマンドは「関係が見つかりません」と応答します。

そこで、インポートしたデータベースサーバーのuser_xにSUPERUSERロールを追加すると、tadãuser_xはリレーションとデータを再度確認できます。

ただし、user_xは、このデータベースにアクセスするためにSUPERUSER権限を持っている必要はありません。

このインポートされたダンプの何が問題になっていますか?誰かが今これを解決する方法はありますか?

4

2 に答える 2

77

おそらく、スキーマのスキーマ権限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;
于 2011-10-13T18:40:00.037 に答える
0

関係は見つかりませんでした。

データベースにテーブルがない場合にも、これを取得します。

iripmu=# select * from testtable;
 id |    Name
----+------------
  1 | Bear
  2 | Tiger
(2 rows)

iripmu=# drop table if exists testtable;
DROP TABLE
iripmu=# \dt
Did not find any relations.
于 2022-02-21T09:39:14.710 に答える