Détermination de l'existence d'une table dans un schéma PostgreSQL
Les bases de données PostgreSQL utilisent souvent des schémas, notamment le schéma public et des schémas personnalisés pour différentes organisations. Cela nécessite des méthodes fiables pour confirmer la présence d'une table dans un schéma particulier.
Limitations du schéma d'information
Bien que le schéma d'information offre une vue des tables de la base de données, il est limité aux tables accessibles par l'utilisateur actuel. Cette limitation peut produire des faux négatifs. La requête suivante, utilisant le schéma d'information, peut ne pas refléter avec précision l'existence de la table :
<code class="language-sql">SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' );</code>
Méthodes fiables utilisant les catalogues système
Pour une vérification plus complète, utilisez les catalogues système de PostgreSQL. La requête ci-dessous utilise pg_class
et pg_namespace
pour déterminer de manière fiable si une table existe, quelles que soient les autorisations de l'utilisateur :
<code class="language-sql">SELECT EXISTS ( SELECT FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'schema_name' AND c.relname = 'table_name' AND c.relkind = 'r' -- only tables );</code>
Cette requête renvoie true
si la table existe.
Contrôle de type pour la vérification de l'existence d'une table
Une autre technique consiste à convertir l'identifiant de la table en type regclass
. Un casting réussi implique l'existence de la table ; l'échec entraîne une exception.
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
Utilisation de to_regclass
(PostgreSQL 9.4 et versions ultérieures)
Pour PostgreSQL 9.4 et versions ultérieures, la fonction to_regclass
fournit une solution plus robuste. Il renvoie NULL
si la table est absente, en évitant les exceptions :
<code class="language-sql">SELECT to_regclass('schema_name.table_name');</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!