2016-06-22 11 views
1

Ich kann Folgendes in MySQL tun, aber würde gerne wissen, wie man das Äquivalent in PostgreSQL. Ich muss die Abfrage in eine Zeichenfolge umbrechen, da der Tabellenname variabel ist (kann nicht einfach CREATE TABLE ausgeführt werden). Dies alles ist in einer MySQL-Stored-Procedure-/Postgres-Funktion enthalten.vorbereitete Anweisung innerhalb der Funktion in Postgres

SET @createTable = CONCAT("CREATE TABLE ", table_name, "(
       id int(11) NOT NULL AUTO_INCREMENT, 
       something varchar(255) NOT NULL"); 
    PREPARE createTableStmt FROM @createTable; 
    EXECUTE createTableStmt; 
    DEALLOCATE PREPARE createTableStmt; 

Kann mir bitte jemand sagen, wie man das in Postgres macht?

+0

Es dynamische SQL in Postgres genannt wird. https://www.postgresql.org/docs/9.5/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN – Bill

Antwort

2

Um es auszuführen einmal, führen Sie einfach die verkettete CREATE TABLE Anweisung.

CREATE OR REPLACE FUNCTION create_my_table(_tbl text) 
    RETURNS void AS 
$func$ 
BEGIN 
    EXECUTE format('CREATE TABLE %I (id serial, something varchar(255) NOT NULL)', _tbl); 
END 
$func$ LANGUAGE plpgsql; 

Call::

SELECT create_my_table('foo_table'); 

fallen zu lassen:

DROP create_my_table(text); 

There are many related answers here. Try a search.

Um die Funktionalität für die wiederholte Verwendung mit variabler Tabellennamen verwenden, um eine plpgsql Funktion mit EXECUTE kapseln

Oder wenn Sie es nur für die aktuelle Sitzung benötigen, können Sie es eine temporäre Funktion machen, die automatisch am Ende der Sitzung fallen gelassen wird:

CREATE OR REPLACE FUNCTION pg_temp.create_my_table(_tbl text) ... 

eine serielle Spalte Verwenden AUTOINCREMENT in Postgres zu implementieren:

Sie könnten die Spalte PRIMARY KEY auch machen wollen.
Und varchar(255) macht selten Sinn. Ich würde text nur statt:

+0

Du bist großartig! Vielen Dank! – 1N5818

Verwandte Themen