Ich versuche, eine psql-Funktion zu erhalten, die einen bestimmten Tabellennamen abschneidet, wenn er existiert. Ich habe mehrere Funktionen ausprobiert, aber bisher hat keine davon funktioniert. Hier ist der Code:
CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT)
returns void
as $$
BEGIN
EXECUTE format(
'IF EXISTS (
SELECT *
FROM information_schema.tables
WHERE table_name =' || tableName || '
)
THEN
TRUNCATE tableName;
END IF;
');
END;
$$language plpgsql
Jetzt kann ich es in einem einfachen Verfahren mit einem harcodierten Namen zum Laufen bringen:
do $$
begin
IF EXISTS (SELECT *
FROM information_schema.tables
WHERE table_name = genre_epf)
THEN
TRUNCATE genre_epf;
END IF;
end
$$;
Aber ich kann mir nicht vorstellen, wie man beide Abfragen mischt. Was mache ich hier falsch?
postgresql
functions
Stanislasdrg Monica wieder einsetzen
quelle
quelle
TRUNCATE tableName;
. Sie versuchen , eine Tabelle mit dem Namen trunkierentableName
,Antworten:
Verwenden Sie die Variable FOUND :
Beachten Sie, dass ich
PERFORM
anstelle von verwendet habe,SELECT
da ich keine Ausgabe der Abfrage benötige. Ich möchte wissen, ob die Abfrage eine Zeile (FOUND = true
) zurückgibt oder nicht (FOUND = false
).quelle