次のように、スキーマdonor
にテーブルreference
を作成しました。
_CREATE TABLE reference.donor (
donor_code smallint PRIMARY KEY,
donor_name character varying NOT NULL,
donor_type smallint REFERENCES reference.donor_type (type_id),
alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code)
);
_
次のようにテーブルにデータを入力しました。
_INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code)
SELECT donor_code, donor_name, donor_type, alpha_2_code
FROM reference.donor_template;
_
私が実行すると:
_\dt+ reference.*
_
psql内で_reference.donor
_テーブルを確認します。
_ List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------------+-------+----------+-------+-------------
reference | donor | table | postgres | 16 kB |
reference | donor_template | table | postgres | 16 kB |
reference | donor_type | table | postgres | 16 kB |
reference | iso_3166_1 | table | postgres | 48 kB |
(4 rows)
_
しかし、_\dt+ donor*
_(または\dt(+)
)を実行すると、_reference.donor
_テーブルが表示されません。
_ List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------------+-------+----------+-------+-------------
oecd_cl | donor | table | postgres | 16 kB |
reference | donor_template | table | postgres | 16 kB |
reference | donor_type | table | postgres | 16 kB |
(3 rows)
_
_reference.donor
_または_\dt+ reference.*
_を実行すると、なぜ_\dt+ *.donor
_テーブルしか表示されないのですか?
私は_\dt
_(または_\dt+
_)がそれを表示することを期待していましたが、表示しません。
私の_search_path
_にはスキーマreference
が含まれており、ユーザーpostgres
はスキーマreference
およびスキーマ内のすべてのテーブルに対するすべての権限を持っています。
_GRANT ALL ON ALL TABLES IN SCHEMA reference TO postgres;
_
明確にするために、私は2つのdonor
テーブルを持っていますが、それらは2つの異なるスキーマ、つまり_oecd.donor
_と_reference.donor
_にあります。 (psql内で\dt(+)
を使用すると、_oecd.donor
_は問題なく表示されます)。
pattern
パラメータが完全に省略されている場合は常に、\d
コマンド現在のスキーマ検索パスに表示されるすべてのオブジェクトを表示します—これは、パターンとして*
を使用することと同じです。 (オブジェクトが含まれているスキーマが検索パスにあり、同じ種類と名前のオブジェクトが検索パスの前にない場合、オブジェクトは可視であると言います 。これは、明示的なスキーマ修飾なしでオブジェクトを名前で参照できるというステートメントに相当します。)可視性に関係なくデータベース内のすべてのオブジェクトを表示するには、パターンとして*.*
を使用します。
大胆な強調鉱山。
明らかに、あなたの search path のreference
の前にoecd_cl
があります。あなたの目的のためにこれを使用してください:
\dt *.donor*
そしてあなたは得るでしょう:
List of relations
Schema | Name | Type | Owner | Size | Description
-----------+----------------+-------+----------+-------+-------------
oecd_cl | donor | table | postgres | 16 kB |
reference | donor | table | postgres | 16 kB |
reference | donor_template | table | postgres | 16 kB |
reference | donor_type | table | postgres | 16 kB |
(4 rows)
リストされているすべてのテーブルのスキーマに「参照」があるため、最初のコマンドが機能します。 2番目のコマンドは「ドナー」に対して同じように機能します。そのため、リレーション「reference.iso_3166_1」の名前には「ドナー」がありません。 iso_3166_1を一覧表示したい場合は、
\dt+ iso*
ref: http://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-PATTERNS