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

PostgreSQL:Crear tabla si no existe AS

CREATE TABLE AS se considera una declaración separada de CREATE TABLE normal, y hasta la versión 9.5 de Postgres (vea la entrada del registro de cambios) no admitía un IF NOT EXISTS cláusula. (Asegúrese de consultar la versión correcta del manual para la versión que está utilizando).

Aunque no es tan flexible, CREATE TABLE ... LIKE la sintaxis puede ser una alternativa en algunas situaciones; en lugar de tomar su estructura (y contenido) de un SELECT instrucción, copia la estructura de otra tabla o vista.

En consecuencia, podría escribir algo como esto (no probado); la inserción final es una forma bastante desordenada de no hacer nada si la tabla ya está llena:

CREATE OR REPLACE VIEW source_data AS SELECT * FROM foo NATURAL JOIN bar;

CREATE TABLE IF NOT EXISTS snapshot LIKE source_data;

INSERT INTO snapshot
SELECT * FROM source_data
WHERE NOT EXISTS ( SELECT * FROM snapshot );

Alternativamente, si desea descartar datos anteriores (por ejemplo, una tabla temporal abandonada), puede descartar condicionalmente la tabla anterior y crear incondicionalmente la nueva:

DROP TABLE IF EXISTS temp_stuff;

CREATE TEMPORARY TABLE temp_stuff AS SELECT * FROM foo NATURAL JOIN bar;