Я создал таблицу 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;
Просто чтобы уточнить, у меня есть две donor
таблицы, но они находятся в двух разных схемах, т. Е. oecd.donor
& reference.donor
. (Я вижу oecd.donor
без проблем, когда я использую \dt(+)
внутри PSQL).
источник
search_path
первую и без того, чтобы я заранее знал имена таблиц / схем? Или я лучше из запрашиваяinformation schema
например ,:SELECT table_schema, table_name FROM information_schema.tables ORDER BY table_schema, table_name;
?\dt *.*
как указано в цитате.Первая команда работает, потому что все перечисленные таблицы имеют «ссылку» в своей схеме. Вторая команда работает так же для «донора». таким образом, отношение "reference.iso_3166_1" не имеет никакого "донора" в своем имени. если вы хотите перечислить iso_3166_1, просто попробуйте
ссылка: http://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-PATTERNS
источник
reference | donor
нет в списке со 2-й командой.\dt
(или\dt+
) не перечисляется таблица reference.donor. Все в порядке в соответствии с таблицей reference.iso_3166_1.