Ich möchte eine Funktion erstellen, um eine Tabelle mit einer bestimmten Struktur zu erstellen, die einen Teil des Tabellennamens als Argument verwendet, sodass der Name der Tabelle t_ lautet. Ähnlich wie dies:
CREATE OR REPLACE FUNCTION create_table_type1(t_name VARCHAR(30)) RETURNS VOID AS $$
BEGIN
EXECUTE "CREATE TABLE IF NOT EXISTS t_"|| t_name ||"
(
id SERIAL,
customerid INT,
daterecorded DATE,
value DOUBLE PRECISION,
PRIMARY KEY (id)
)"
END
$$ LANGUAGE plpgsql
Dann nenne es wie:
SELECT create_table_type1('one');
Ist es möglich?
postgresql
functions
postgresql-9.2
plpgsql
Alan Cor
quelle
quelle
IF NOT EXISTS
. Danke, geändert.$$ ... $$ LANGUAGE plpgsql;
statt verwenden$func$ ... $func$ LANGUAGE plpgsql;
? Was ist der Unterschied zwischen diesen beiden? Gibt es eine Situation, in der einer dem anderen vorzuziehen ist? Ich frage mich, weil ich das erstere benutzt habe.$func$
statt nur$$
zur Klarheit und um Probleme mit verschachtelten Dollar- Notierungen zu vermeiden.ja das ist möglich Sie müssen jedoch ein wenig vorsichtig sein. DDLs in einer gespeicherten Prozedur funktionieren normalerweise. In einigen bösen Eckfällen kann es zu "Cache-Lookup" -Fehlern kommen. Der Grund dafür ist, dass eine Prozedur im Grunde genommen Teil einer Anweisung ist und das Ändern dieser Systemobjekte im laufenden Betrieb in seltenen Fällen zu Fehlern führen kann (muss). Dies kann jedoch mit CREATE TABLE nicht passieren. Sie sollten also in Sicherheit sein.
quelle