FEHLER: nicht abgeschlossene Zeichenfolge in Anführungszeichen oder in der Nähe
Während der Ausführung unten gezeigt trigger-code mit Hilfe von ANT-ich bin immer der Fehler
org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer"
Position: 57
Ich bin in der Lage, erfolgreich zu führen Sie den code unten durch PGADmin (postgres) und command line utility "psql" und der trigger-Funktion wird Hinzugefügt, aber während der Ausführung der durch ANT scheitert es jedes mal
BEGIN TRANSACTION;
CREATE OR REPLACE FUNCTION sweeper() RETURNS trigger as '
DECLARE
timeout integer;
BEGIN
timeout = 30 * 24 * 60 * 60 ;
DELETE FROM diagnosticdata WHERE current_timestamp - teststarttime > (timeout * ''1 sec''::interval);
return NEW;
END;
' LANGUAGE 'plpgsql';
-- Trigger: sweep on diagnosticdata
CREATE TRIGGER sweep
AFTER INSERT
ON diagnosticdata
FOR EACH ROW
EXECUTE PROCEDURE sweeper();
END;
InformationsquelleAutor der Frage Anuj | 2010-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ich auf diese Fehler in liquibase und diese Seite war einer der ersten Suchergebnissen, also denke ich, ich Teile meine Lösung auf diese Seite:
Können Sie Ihre gesamte sql in einer separaten Datei und include diese in der änderungssatz.
Seine wichtig, die
splitStatements
optionfalse
.Den ganzen changeset würde dann Aussehen wie
Hab ich immer gerne den großen SQL-Teile (wie Funktions-updates und so) in separaten Dateien.
Auf diese Weise erhalten Sie die richtige syntax-highlighting beim öffnen der sql-Datei und nicht zu vermischen XML und SQL in eine Datei.
Bearbeiten: wie bereits erwähnt, in den Kommentaren ist es erwähnenswert, dass die
sql
ändern unterstützt diesplitStatements
- option als auch (thx an AndreyT für den Hinweis).InformationsquelleAutor der Antwort Friedrich Große
Ich hatte das gleiche problem mit dem JDBC-Treiber verwendet, die von Liquibase.
Scheint es, dass der Fahrer explodiert jede Zeile endete mit einem Semikolon, und führt es als eine separate SQL-Befehl. Deshalb ist der folgende code wird ausgeführt, indem Sie den JDBC-Treiber in der folgenden Reihenfolge:
CREATE OR REPLACE FUNCTION test(text) RETURNS VOID AS ' DECLARE tmp text
BEGIN tmp := "test"
END;
' LANGUAGE plpgsql
Natürlich, das ist ungültiges SQL und verursacht die folgende Fehlermeldung:
Um dies zu korrigieren, müssen Sie umgekehrte Schrägstriche verwenden, nach jeder Zeile endete mit Semikolon:
Alternativ können Sie die gesamte definition in eine Zeile.
InformationsquelleAutor der Antwort manRo
Ich bin mit HeidiSQL client-und dies wurde gelöst, indem TRENNZEICHEN //vor dem ERSTELLEN ODER REPLACE-Anweisung. Es ist ein auch ein auf 'Senden batch in einem Rutsch" - option in HeidiSQL, im wesentlichen erreicht die gleiche Sache.
InformationsquelleAutor der Antwort user3328634
Dieser Fehler tritt auf, da eine Interaktion zwischen den bestimmten client verwendet, um eine Verbindung zum server herstellen und die form der Funktion. Zur Veranschaulichung:
Dem folgenden code wird ausgeführt, ohne Unfall in Netbeans 7, Eichhörnchen, DbSchema, PgAdmin3
Bitte beachten Sie, dass die 'begin' statement kommt sofort nach dem '$' string mit Anführungszeichen.
Den nächsten code wird angehalten, alle oben genannten clients mit Ausnahme von PgAdmin3.
Der entscheidende Unterschied im zweiten Beispiel ist das 'declare' - Abschnitt. Die Masche mit back-Schrägstriche löst einen Fehler aus, mit PgAdmin3.
Zusammenfassend schlage ich vor, Sie versuchen, verschiedene Werkzeuge. Einige Werkzeuge, die, obwohl Sie sich eigentlich dem schreiben von text-Dateien setzen Sie unsichtbar Zeug in den text. Notorisch dies geschieht mit der Unicode-BOM, die halt jede php-Datei, die versucht zu implementieren, Sitzungen oder namespaces.
Dies ist zwar keine Lösung, ich hoffe es hilft.
InformationsquelleAutor der Antwort huphos
Ich hatte das gleiche problem mit zeos und c++ builder.
Die Lösung in meinem Fall:
Ändern Sie die Eigenschaft Trennzeichen (meist ";") zu einer anderen Komponente (Klasse) die ich verwendet habe.
Vielleicht Ant haben etwas ähnliches.
InformationsquelleAutor der Antwort fvel
Diesem Beispiel hat bei mir mit PostgreSQL 14.1 und HeidiSQL 9.4.0.5125
InformationsquelleAutor der Antwort David
Ich erhalte den gleichen Fehler, da hatte ich mein Semikolon in einer neuen Zeile wie diese:
Stellen Sie sicher, dass Sie in einer einzigen Zeile als
InformationsquelleAutor der Antwort masoodg
Ich weiß, diese Frage wurde vor langer Zeit aber ich hatte irgendwie das gleiche Problem mit einer Postgresql-script (ausführen von Jenkins) mit Hilfe von Ant-die SQL-Aufgabe.
Habe ich versucht zu ausführen dieses SQL (gespeichert in einer Datei namens audit.sql):
bekam aber die Fehlermeldung "unterminated dollar-quoted string". Kein problem, wenn man es von pgAdmin.
Fand ich heraus, dass es ist nicht der Fahrer, dass die split das Skript bei jedem ";" aber eher Ant.
In http://grokbase.com/t/postgresql/pgsql-jdbc/06cjx3s3y0/ant-sql-tag-for-dollar-quoting ich die Antwort gefunden:
Meiner Ameise SQL-Skript sieht so aus und es funktioniert:
InformationsquelleAutor der Antwort lisben