Уникнення назв стовпців, що нагадують ключові слова, у Postgres


134

Якщо стовпець у таблиці Postgres має назву year, як повинен виглядати INSERTзапит, щоб встановити значення для цього стовпця?

Наприклад: INSERT INTO table (id, name, year) VALUES ( ... );дає помилку близько року слова.

Відповіді:


211

Просто додайте yearподвійні лапки, щоб не інтерпретувати його як ключове слово :

INSERT INTO table (id, name, "year") VALUES ( ... );

З документації :

Існує другий вид ідентифікатора: ідентифікатор з обмеженим доступом або ідентифікований котирування. Він утворюється шляхом додавання довільної послідовності символів у подвійні лапки ("). Обмежений ідентифікатор - це завжди ідентифікатор, ніколи не ключове слово. Тому" select "може використовуватися для позначення стовпця або таблиці з назвою" select ", тоді як вибірка без котирування буде взята як ключове слово і, отже, спровокує помилку розбору при використанні там, де очікується назва таблиці або стовпця.


44
Деякі попередження: Без лапок PostgreSQL складає всі ідентифікатори на малі регістри. MyTable, myTableі mytableтакі самі. З цитатами це складання не робиться. Тож "MyTable"вже не те саме, що mytable.
AH

19
Що ще краще, перешкоджайте використовувати застережені слова або змішаний регістр як ідентифікатори, і вам ніколи не доведеться використовувати подвійні лапки або отримувати дивні повідомлення про помилки.
Ервін Брандштеттер


8
@ErwinBrandstetter Проблема полягає в тому, коли ви працюєте над усталеним проектом.
церулез

5
@ HoàngLong так, це так. update "user" set "password" = 'value...';працює чудово ...
Філ

0

Якщо ви не надаєте лапок у будь-яких полях / стовпцях, це буде занижене розміщенням Postgres за замовчуванням. І Postgres буде пропускати перевірку ключового слова, коли мова йде про назву стовпця.

У вашому випадку я не думаю, що обов'язково додавати лапки, коли мова йде про columns. Але якщо ви використовуєте keywords(зареєстровано Postgres) в якості імені Table, Schema, Functionабо і Triggerт.д., ви повинні використовувати або подвійні лапки, або ви можете вказати ім'я схеми з точкою конкатенації.

Припустимо, замовлення - це ключове слово, зареєстроване Postgres. І в деяких сценаріях ви повинні використовувати це ключове слово як назву таблиці.

У той час Postgres дозволить вам створити таблицю з keywords. Така краса Постгреса.

Щоб отримати доступ до таблиці замовлень, або вам потрібно використовувати подвійну цитату, або ви можете навести схему перед назвою таблиці.

EG

1.

select * from schema_name.order;

2.

select * from "order";

Так само ви можете використовувати цей тип комбінацій. Сподіваюся, що це вам допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.