sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL:Vytvořte tabulku, pokud neexistuje AS

CREATE TABLE AS se považuje za samostatný příkaz od běžného příkazu CREATE TABLE a do verze Postgres 9.5 (viz záznam protokolu změn) nepodporoval IF NOT EXISTS doložka. (Nezapomeňte se podívat na správnou verzi příručky pro verzi, kterou používáte.)

Ačkoli to není tak flexibilní, CREATE TABLE ... LIKE syntaxe může být v některých situacích alternativou; spíše než přebírat jeho strukturu (a obsah) z SELECT zkopíruje strukturu jiné tabulky nebo pohledu.

V důsledku toho byste mohli napsat něco takového (netestováno); poslední vložení je poněkud chaotický způsob, jak nedělat nic, pokud je tabulka již naplněna:

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 );

Případně, pokud chcete zrušit předchozí data (např. opuštěnou dočasnou tabulku), můžete podmíněně zrušit starou tabulku a bezpodmínečně vytvořit novou:

DROP TABLE IF EXISTS temp_stuff;

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


  1. Příklady SUBTIME() – MySQL

  2. Vytvořte dočasnou tabulku v příkazu SELECT bez samostatné CREATE TABLE

  3. jak rozdělit řetězec do různých sloupců?

  4. MariaDB UCASE() Vysvětleno