Wie verwenden Sie EXECUTE-FORMAT ... MIT in der postgres-Funktion
CREATE OR REPLACE FUNCTION dummytest_insert_trigger()
RETURNS trigger AS
$BODY$
DECLARE
v_partition_name VARCHAR(32);
BEGIN
IF NEW.datetime IS NOT NULL THEN
v_partition_name := 'dummyTest';
EXECUTE format('INSERT INTO %I VALUES ($1,$2)',v_partition_name)using NEW.id,NEW.datetime;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION dummytest_insert_trigger()
OWNER TO postgres;
Ich versuche, einfügen mit
insert into dummyTest Werte(1,'2013-01-01 00:00:00+05:30');
Aber es zeigt Fehler wie
ERROR: function format(unknown) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Context: PL/pgSQL function "dummytest_insert_trigger" line 8 at EXECUTE statement
Ich bin nicht in der Lage den Fehler.
Welche version von PostgreSQL verwenden Sie? AFAIK, die
format
- Funktion wurde Hinzugefügt, 9.1.InformationsquelleAutor vg123 | 2012-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Funktion könnte wie folgt Aussehen in Postgres 9.0 oder später:
Über
RETURN NULL
:Ich würde Ratschläge nicht zu verwenden Sie groß-und Kleinschreibung von Bezeichnern. Mit
format( .. %I ..)
oderquote_ident()
Sie bekommen würde, eine Tabelle mit dem Namen"dummyTest"
, müssen Sie doppelte Anführungszeichen für den rest seiner Existenz. Related:Verwenden Sie Kleinbuchstaben statt:
Es gibt wirklich keinen Sinn in der Verwendung von dynamischem SQL mit
EXECUTE
so lange, wie Sie eine statische Tabelle Namen. Aber das ist wahrscheinlich nur der vereinfachten Beispiel?Klingt wie Sie möglicherweise erstellen eine Endlosschleife mit Ihrem Trigger. Es Ihrer Verantwortung, dies zu vermeiden.
Erwin Brandstetter : ja, Es war mein Fehler.Dank Ihrer Lösung gearbeitet. 🙂 🙂
Das war perfekt ."Es gibt wirklich keinen Sinn in der Verwendung von dynamic SQL mit EXECUTE as lange, wie Sie eine statische Tabelle Namen. ".
InformationsquelleAutor Erwin Brandstetter
Müssen Sie eplxicit cast zu
text
:ja.Ich hab das problem.Es wurde verursacht, da die version nur.Ich war mit der version 9.0.Dank
Sobald Sie ein upgrade: eine Besetzung zu
text
ist nicht notwendig,text
wird der Standard-Typ für börsennotierte Literale.InformationsquelleAutor mys