Ich habe folgende Funktionsdefinition für eine PostgreSQL 9.3.4 Datenbank:PostgreSQL Funktionsdefinition in SQuirreL: ungekündigten Dollar-Zeichenfolge in Anführungszeichen
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Wenn ich versuche, dies in SQuirreL auszuführen (3.5.3 oder 3.6) , bekomme ich folgende Fehlermeldung:
Error: ERROR: unterminated dollar-quoted string at or near "$$
BEGIN
NEW.modified_at = now()"
Position: 77
SQLState: 42601
ErrorCode: 0
Bisher habe ich diesen can be mitigated by using single quotes gelernt, wie so die Funktion Körper abgrenzen:
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS '
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
' LANGUAGE plpgsql;
Noch möchte ich wissen, ob das nicht anders gelöst werden kann - ich denke es muss möglich sein, da Flyway dieses Skript ausführen kann und es verwendet genau den gleichen JDBC-Treiber, der in SQuirreL konfiguriert ist.
Update:@a_horse_with_no_name stellte fest, dass dieser Fehler nichts mit den JDBC-Treiber zu tun hat, sondern mit wie SQuirreL die SQL-Anweisung analysiert und teilt sie in Stücke, bevor sie in die Datenbank zu senden. Die verbleibende Frage lautet also: Kann SQuirreL eine Abfrage raw/unparsed senden? Ich habe ziemlich viel gesucht, konnte keinen Weg finden, das zu tun.
SQLFiddle hat das gleiche Problem, aber dort die einzige Anführungszeichen Funktion Körper nicht einmal das Problem zu lösen. – Patrick
Das hat nichts mit dem JDBC-Treiber zu tun. Ich nehme an, dass Squirrel nicht weiß, dass der Text zwischen $$ tatsächlich ein String-Literal ist und nur die Funktionsdefinition bis zum ersten ';' sendet. Ist Squirrel in der Lage, eine Abfrage ohne Analyse an die Datenbank zu senden? Es funktioniert in SQFiddle, wenn Sie ein anderes Trennzeichen verwenden: http://sqlfiddle.com/#!15/ce3fa3/2 –