J'ai créé la table donor
dans le schéma reference
selon:
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)
);
J'ai rempli le tableau selon:
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;
Quand je cours:
\dt+ reference.*
à l'intérieur de psql, je vois la table 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)
Mais lorsque j'exécute \dt+ donor*
(Ou \dt(+)
) je ne vois pas la table 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)
Pourquoi ne puis-je voir la table reference.donor
Que si j'exécute \dt+ reference.*
Ou \dt+ *.donor
?
Je m'attendais à ce que \dt
(Ou \dt+
) L'affiche, mais ce n'est pas le cas.
Mon search_path
Inclut le schéma reference
et l'utilisateur postgres
a toutes les autorisations sur le schéma reference
et toutes les tables du schéma selon:
GRANT ALL ON ALL TABLES IN SCHEMA reference TO postgres;
Juste pour clarifier, j'ai deux tables donor
, mais elles sont dans deux schémas différents, c'est-à-dire oecd.donor
& reference.donor
. (Je peux voir oecd.donor
Sans aucun problème lorsque j'utilise \dt(+)
dans psql).
La documentation sur psql explique:
Chaque fois que le paramètre
pattern
est complètement omis, le\d
les commandes affichent tous les objets qui sont visibles dans le chemin de recherche de schéma actuel - cela équivaut à utiliser*
comme modèle. (Un objet est dit visible si son schéma contenant est dans le chemin de recherche et aucun objet du même type et nom n'apparaît plus tôt dans le chemin de recherche . Cela équivaut à l'instruction selon laquelle l'objet peut être référencé par son nom sans qualification explicite de schéma.) Pour voir tous les objets dans la base de données indépendamment de la visibilité, utilisez*.*
comme modèle.
Accentuation mienne.
De toute évidence, vous avez oecd_cl
avant reference
dans votre chemin de recherche . Utilisez ceci pour votre but:
\dt *.donor*
Et vous obtiendrez:
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)
La première commande fonctionne car toutes les tables répertoriées ont une "référence" dans leur schéma. La deuxième commande fonctionne de la même manière pour "donneur". la relation "reference.iso_3166_1" n'a donc pas de "donneur" dans son nom. si vous souhaitez répertorier iso_3166_1, essayez simplement
\dt+ iso*
réf: http://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-PATTERNS