Синтаксическая ошибка PostgreSQL, вызванная фиксацией - PullRequest
0 голосов
/ 29 ноября 2010

Мы работаем над объединением отдельных файлов в групповую базу данных PostgreSQL. Все файлы прекрасно работали сами по себе, и когда мы объединили их, мы запустили их без проблем. Это начало зависать при создании одного триггера, поэтому мы закомментировали триггер. При следующем запуске файла слияния мы получили следующую ошибку:

ERROR: Syntax error at end of input
LINE 181: --$$ LANGUAGE plpgsql 

После этой ошибки были последующие синтаксические ошибки, а затем, к нашему ужасу, мы нашли следующее в нашем файле журнала:

ERROR: Syntax error at end of input
LINE 181: --$$ LANGUAGE plpgsql 
COMMIT

У нас были тесты в этом файле, которые содержали тестовые данные, которые НЕ должны были вводиться в базу данных, что повредило тому, кто знает, сколько данных в нашей базе данных. Мы просмотрели каждый включенный файл и COMMIT нигде нет!

Кто-нибудь сталкивался с чем-то подобным? Есть ли какая-либо причина, по которой ошибка в синтаксическом анализе может привести к коммиту?

1 Ответ

2 голосов
/ 29 ноября 2010

Если у вас нет оператора BEGIN, то соединение PostgreSQL находится в режиме «автоматической фиксации», фиксируя каждое изменение после выполнения оператора.Поскольку вы неправильно комментируете свой код, я бы сказал, что вы прокомментировали оператор BEGIN ранее в коде.Но я не могу быть уверен, потому что вы не предоставили ни одного из ваших SQL.

Обратите внимание, что синтаксис:

--$$

не комментирует конец функции $$.Это означает пустой комментарий как последнее, что есть внутри строки.Это может помочь вам, если вы прочитаете строку следующим образом:

--
$$

Вот почему вы получаете ошибку разбора в строке с комментариями.Если бы это было фактически прокомментировано, PostgreSQL не проанализировал бы это.$$ является оператором кавычек, заключающим в себе код SQL, и является просто вспомогательным синтаксисом против использования ' для цитирования (что означает, что вы должны заключать в кавычки каждую кавычку внутри цитируемого SQL).То, что вы считаете закомментированной строкой, на самом деле было просто фрагментом строки, заканчивающимся двумя дефисами.

На заметку общего характера: комментирование следует использовать только для добавления описаний в код, а не для отключения разделов кода.Используйте контроль версий, если вам нужен доступ к более старым версиям кода.

Редактировать: Уточненное объяснение строк в кавычках.Надеюсь, теперь это имеет больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...