Відповіді:
Просто додайте year
подвійні лапки, щоб не інтерпретувати його як ключове слово :
INSERT INTO table (id, name, "year") VALUES ( ... );
З документації :
Існує другий вид ідентифікатора: ідентифікатор з обмеженим доступом або ідентифікований котирування. Він утворюється шляхом додавання довільної послідовності символів у подвійні лапки ("). Обмежений ідентифікатор - це завжди ідентифікатор, ніколи не ключове слово. Тому" select "може використовуватися для позначення стовпця або таблиці з назвою" select ", тоді як вибірка без котирування буде взята як ключове слово і, отже, спровокує помилку розбору при використанні там, де очікується назва таблиці або стовпця.
update "user" set "password" = 'value...';
працює чудово ...
Якщо ви не надаєте лапок у будь-яких полях / стовпцях, це буде занижене розміщенням Postgres за замовчуванням. І Postgres буде пропускати перевірку ключового слова, коли мова йде про назву стовпця.
У вашому випадку я не думаю, що обов'язково додавати лапки, коли мова йде про columns
. Але якщо ви використовуєте keywords
(зареєстровано Postgres) в якості імені Table
, Schema
, Function
або і Trigger
т.д., ви повинні використовувати або подвійні лапки, або ви можете вказати ім'я схеми з точкою конкатенації.
Припустимо, замовлення - це ключове слово, зареєстроване Postgres. І в деяких сценаріях ви повинні використовувати це ключове слово як назву таблиці.
У той час Postgres дозволить вам створити таблицю з keywords
. Така краса Постгреса.
Щоб отримати доступ до таблиці замовлень, або вам потрібно використовувати подвійну цитату, або ви можете навести схему перед назвою таблиці.
EG
1.
select * from schema_name.order;
2.
select * from "order";
Так само ви можете використовувати цей тип комбінацій. Сподіваюся, що це вам допоможе.
MyTable
,myTable
іmytable
такі самі. З цитатами це складання не робиться. Тож"MyTable"
вже не те саме, щоmytable
.