2016-05-06 5 views
0

Ich habe versucht, 'log_min_error_statement' gleich debug5 in postgresql.conf, aber ich bekomme immer noch den Standard "PostgreSQL sagte: Syntaxfehler bei oder in der Nähe von" AS "" Fehlermeldung sowohl in der Konsole und dem Postgresql-Protokoll.Gibt es eine Möglichkeit, dass Postgres Ihnen sagt, was ein Syntaxfehler zusätzlich zu dem war, was es bei/nahe ist?

+0

'log_min_error_statement' steuert, welche Meldungen protokolliert werden sollen, nicht wie detailliert sie sein sollen. – zerkms

+2

Können Sie in Ihre Frage die genaue Aussage, die Sie ausführen, und die genaue Fehlermeldung, die Sie erhalten, einfügen? Wenn es einen Syntaxfehler gibt, kann ein Parser wissen, dass ein Fehler vorliegt (ein unerwarteter Text an einer bestimmten Stelle), aber er kann nicht wissen, worauf der Fehler bezogen werden kann. –

+0

Danke @zerkms! @ZiggyCrueltyfreeZeitgeister Ich habe es herausgefunden. Es stellte sich heraus, dass es wirklich offensichtlich Syntaxfehler war. Ich habe es einfach nicht bemerkt, wegen wie lange meine Aussage war. –

Antwort

2

Wenn PostgreSQL wusste, was der Fehler war, würde es Ihnen zumindest in den meisten Fällen sagen.

Wenn es nur "Syntaxfehler bei oder nahe ..." sagt, weiß es nicht, was Sie meinten, und kann nicht erraten, was falsch ist. Es ist ein Parse-Fehler. Es könnte eine (sehr lange) Liste der Vorschläge bieten, aber das würde Fehlermeldungen absurderweise ausführlich, wie machen:

postgres=# SELECT AS fred ORDER BY 1; 
ERROR: syntax error at or near "AS" 
LINE 1: SELECT AS fred ORDER BY 1; 

Yup, das ist ein Syntaxfehler, weil es auf jeder Ebene ist nicht sinnvoll. Was stimmt damit nicht? Wie beschreiben Sie das kurz und bündig? Wie sagt ein Parser überhaupt, was falsch ist?

postgres=# SELECT AS fred ORDER BY 1; 
ERROR: syntax error at or near "AS" 
LINE 1: SELECT AS fred ORDER BY 1; 
HINT: typo? 
HINT: Did you use a reserved keyword as an identifier without "quoting" it? Like "AS"? 
HINT: Did you leave out the value before the AS keyword? 
HINT: ... endless possibilities ... 

Gelegentlich kann ein Parser etwas erraten, was Sie möglicherweise falsch gemacht haben. Der PostgreSQL-Parser versucht Ihnen zu sagen, wann es möglich ist, z.

psql -c "SELECT 'openquote"; 
ERROR: unterminated quoted string at or near "'openquote" 
LINE 1: SELECT 'openquote 
+0

Das macht Sinn, danke für die Antwort! –