Если столбец в таблице Постгреса имеет имя year
, как должен выглядеть INSERT
запрос, чтобы установить значение для этого столбца?
Например: INSERT INTO table (id, name, year) VALUES ( ... );
дает ошибку около года слова.
Если столбец в таблице Постгреса имеет имя year
, как должен выглядеть INSERT
запрос, чтобы установить значение для этого столбца?
Например: INSERT INTO table (id, name, year) VALUES ( ... );
дает ошибку около года слова.
Ответы:
Просто заключите его 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
. В этом вся прелесть Postgres.
Чтобы получить доступ к таблице заказов, вы должны либо использовать двойные кавычки, либо вы можете указать имя схемы перед именем таблицы.
НАПРИМЕР
1.
select * from schema_name.order;
2.
select * from "order";
Точно так же вы можете использовать этот тип комбинации. Надеюсь, что это поможет вам.
MyTable
,myTable
иmytable
такие же. С кавычками такое сворачивание не производится. Так что"MyTable"
уже не то же самое, чтоmytable
.