Как говорили другие, user
- зарезервированное слово в SQL и Postgres.
Во многих базах данных есть много зарезервированных слов, более тысячи, когда я последний раз подсчитывал.Поэтому очень легко столкнуться со странной проблемой из-за зарезервированного конфликта слов.
Подчеркивание в конце: user_
Вот самый простой совет, который я когда-либо изучал для SQL: Always добавьте заключительное подчеркивание к своим именам.Я делаю это для имен таблиц, имен столбцов, имен индексов и так далее.
Спецификация SQL, в частности, обещает † никогда не иметь ключевого слова или зарезервированного слова с завершающим подчеркиванием.Это обещание странным образом вставлено в спецификацию без контекста.Но для меня это кричит: «Добавьте подчеркивание ко всем вашим именам!».
После принятия этого правила я обнаружил приятную вторичную выгоду.Когда я вижу подчеркивание в коде, в комментариях, в отслеживании проблем и в электронных письмах, я всегда знаю, что мы имеем в виду именно элемент базы данных, такой как таблица customer_
, в отличие от понятия «клиент» или классаCustomer
в моем коде Java.
† Я не могу процитировать спецификацию SQL, потому что, к сожалению, она защищена авторским правом.В спецификации SQL: 2011 прочитайте раздел 5.4 Имена и идентификаторы под заголовком Правила синтаксиса пункт 3, ПРИМЕЧАНИЕ 111. В SQL-92 см. Раздел 5.2, пункт 11. Будет работать только поиск слова underscore
.