Ho la seguente definizione di funzione per un database PostgreSQL 9.3.4:PostgreSQL definizione di funzione in scoiattolo: non terminata stringa quotata con dollari
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Quando provo ad eseguire questo a Squirrel (3.5.3 o 3.6) , ottengo il seguente errore:
Error: ERROR: unterminated dollar-quoted string at or near "$$
BEGIN
NEW.modified_at = now()"
Position: 77
SQLState: 42601
ErrorCode: 0
Finora ho imparato questo can be mitigated by using single quotes per delimitare il corpo della funzione in questo modo:
CREATE OR REPLACE FUNCTION update_modified_timestamp()
RETURNS TRIGGER AS '
BEGIN
NEW.modified_at = now();
RETURN NEW;
END;
' LANGUAGE plpgsql;
Ancora vorrei sapere se questo non può essere risolto altrimenti - Penso che sia possibile dal momento che Flyway può eseguire questo script e utilizza lo stesso driver JDBC configurato in SQuirreL.
Aggiornamento:@a_horse_with_no_name notato che questo errore non ha nulla a che fare con il driver JDBC, ma con il modo SQuirreL analizza l'istruzione SQL e si divide in pezzi prima di inviarli al database. Quindi la domanda rimanente è: Can SQuirreL può inviare una query raw/unparsed? Ho cercato un bel po 'non riuscivo a trovare un modo per farlo.
SQLFiddle ha lo stesso problema, ma il corpo della funzione di virgolette singole non risolve nemmeno il problema. – Patrick
Questo non ha nulla a che fare con il driver JDBC. Immagino che Squirrel non sappia che il testo tra $$ è in realtà una stringa letterale e invia solo la definizione della funzione al primo ';'. Squirrel è in grado di inviare una query senza analizzare il database nel database? Funziona in SQFiddle se usi un delimitatore diverso: http://sqlfiddle.com/#!15/ce3fa3/2 –