A continuación se muestran cinco formas de comprobar si existe una tabla en una base de datos PostgreSQL.
Las pg_tables
Ver
Las pg_tables
view contiene información sobre cada tabla en la base de datos.
Podemos usarlo para verificar si una tabla dada existe en la base de datos actual:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 'actor'
);
Resultado:
True
En este caso obtengo True
, lo que significa que la tabla existe (y tengo acceso a ella).
Dependiendo de su configuración, puede obtener t
/f
en lugar de True
/False
.
El information_schema.tables
Ver
El information_schema.tables
view contiene todas las tablas y vistas definidas en la base de datos actual a la que tiene acceso el usuario actual.
Podemos usarlo para comprobar si existe una tabla dada y que tenemos acceso a ella:
SELECT EXISTS (
SELECT FROM
information_schema.tables
WHERE
table_schema LIKE 'public' AND
table_type LIKE 'BASE TABLE' AND
table_name = 'actor'
);
Resultado:
True
Otra forma de hacerlo sería obtener el conteo:
SELECT
COUNT(table_name)
FROM
information_schema.tables
WHERE
table_schema LIKE 'public' AND
table_type LIKE 'BASE TABLE' AND
table_name = 'actor';
Resultado:
1
El table_type
puede ser uno de los siguientes:
BASE TABLE | Tabla base persistente (tabla normal) |
VIEW | Ver |
FOREIGN | Tabla extranjera |
LOCAL TEMPORARY | Mesa temporal |
Puede omitir table_type
de su filtro si desea verificar si el nombre existe en todos los tipos.
Catálogos del sistema
Los catálogos del sistema son el lugar donde un RDBMS almacena los metadatos del esquema, como información sobre tablas y columnas, e información de contabilidad interna.
En Postgres, los catálogos del sistema son tablas normales.
Podemos usar dos de ellos para verificar si existe una tabla dada:
SELECT EXISTS (
SELECT FROM
pg_catalog.pg_class c
JOIN
pg_catalog.pg_namespace n ON
n.oid = c.relnamespace
WHERE
n.nspname = 'public' AND
c.relname = 'actor' AND
c.relkind = 'r'
);
Resultado:
True
El relkind
de r
es para mesa ordinaria .
Puede eliminar el relkind
filtre por completo si simplemente desea verificar si un objeto ya tiene o no el nombre que desea dar a una tabla.
O puede filtrar por otros tipos.
Estas son las opciones:
r | tabla ordinaria |
i | índice |
S | secuencia |
t | mesa TOSTADAS |
v | ver |
m | vista materializada |
c | tipo compuesto |
f | tabla extranjera |
p | tabla particionada |
I | índice particionado |
El to_regclass()
Función
El to_regclass()
La función traduce un nombre de relación textual a su OID. Si el nombre existe, se devuelve el OID.
Ejemplo:
SELECT to_regclass('public.actor');
Resultado:
actor
Si la tabla no existe, se devuelve NULL.
Transmitir a regclass
También es posible convertir el nombre de la tabla para escribir regclass
:
SELECT 'public.actor'::regclass
Resultado:
actor
Sin embargo, si la tabla no existe, se produce un error.
Comprobar si una tabla ya existe antes de crearla
Si necesita crear la tabla si no existe, puede usar IF NOT EXISTS
cláusula de CREATE TABLE
declaración. Si la tabla no existe, se creará. Si ya existe, no se creará.
Consulte Crear una tabla solo si no existe en PostgreSQL para ver un ejemplo.