sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo crear una tabla solo si no existe en PostgreSQL

En PostgreSQL, puede usar IF NOT EXISTS cláusula de CREATE TABLE declaración para verificar si una tabla con el mismo nombre ya existe en la base de datos antes de crearla.

La tabla solo se creará si no existe otra tabla con el mismo nombre. Si ya existe una tabla con ese nombre, se emitirá un "aviso" en lugar de un error.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Aquí, t1 es el nombre de la tabla, y todo lo que está entre paréntesis es la definición de la tabla (es decir, columnas, etc.).

En ese caso, la tabla solo se creará si no existe una llamada t1 .

Compruebe que la tabla ahora existe

Podemos consultar las pg_tables view para verificar si la tabla ahora existe:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 't1'
    );

Resultado:

True

En este caso obtengo True , lo que significa que la tabla existe y que tengo acceso a ella.

Dependiendo de su configuración, puede obtener t /f en lugar de True /False .

Intente crear la tabla de nuevo

Si intentamos crear esa tabla nuevamente:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

No recibimos un error, recibimos un aviso:

NOTICE:  relation "t1" already exists, skipping

Como era de esperar, el aviso nos dice que la tabla ya existe.

Sin el IF NOT EXISTS Cláusula

Esto es lo que sucede cuando no usamos IF NOT EXISTS cláusula al intentar crear una tabla que ya existe:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Esta vez obtenemos un error:

ERROR:  relation "t1" already exists

Tenga en cuenta que IF NOT EXISTS cláusula no comprueba la estructura/definición de la tabla. Simplemente comprueba que no existe ninguna tabla con el mismo nombre que estamos tratando de dar a la tabla que estamos creando.

En otras palabras, el hecho de que ya exista una tabla con ese nombre no significa que tenga la definición correcta.

El IF NOT EXISTS se agregó funcionalidad en PostgreSQL 9.1 (notas de la versión).