Имена столбцов PostgreSQL чувствительны к регистру?
У меня есть таблица БД, скажем, persons
в Postgres, переданном другой командой с именем столбца, скажем, "first_Name"
, Сейчас я пытаюсь использовать PG Commander для запроса этой таблицы по этому столбцу-имени.
select * from persons where first_Name="xyz";
И это только возвращает
ОШИБКА: столбец "first_Name" не существует
Не уверен, что я делаю что-то глупое или есть обходной путь для этой проблемы, который я пропускаю?
5 ответов
Все идентификаторы (включая имена столбцов), которые не заключены в двойные кавычки, в PostgreSQL свернуты в нижний регистр. Имена столбцов, которые были созданы с двойными кавычками и, таким образом, сохраняли заглавные буквы (и / или другие нарушения синтаксиса), должны быть заключены в двойные кавычки на всю оставшуюся жизнь. Итак, да, имена столбцов PostgreSQL чувствительны к регистру:
SELECT * FROM persons WHERE "first_Name" = 'xyz';
Также исправьте неправильные двойные кавычки вокруг 'xyz'
, Значения (строковые литералы) заключаются в одинарные кавычки.
Мой постоянный совет заключается в том, чтобы использовать только легальные, строчные буквы, чтобы двойные кавычки не требовались.
Цитировать документацию:
Ключевые слова и идентификаторы без кавычек не чувствительны к регистру. Следовательно:
UPDATE MY_TABLE SET A = 5;
можно эквивалентно записать как:
uPDaTE my_TabLE SeT a = 5;
Заключение в кавычки идентификатора делает его чувствительным к регистру, тогда как имена без кавычек всегда свертываются в нижний регистр:
UPDATE "my_table" SET "a" = 5; // equivalent to the above examples
Имена столбцов в смешанном регистре или в верхнем регистре должны быть заключены в двойные кавычки в postgres sql. Так что лучшим соглашением будет следовать за всем небольшим регистром с подчеркиванием.
Если вы используете JPA, я рекомендую изменить схему на строчные буквы, имена таблиц и столбцов, вы можете использовать следующие инструкции, которые помогут вам:
select
psat.schemaname,
psat.relname,
pa.attname,
psat.relid
from
pg_catalog.pg_stat_all_tables psat,
pg_catalog.pg_attribute pa
where
psat.relid = pa.attrelid
изменить имя схемы:
ALTER SCHEMA "XXXXX" RENAME TO xxxxx;
изменить имена таблиц:
ALTER TABLE xxxxx."AAAAA" RENAME TO aaaaa;
изменить имена столбцов:
ALTER TABLE xxxxx.aaaaa RENAME COLUMN "CCCCC" TO ccccc;
Вы можете попробовать этот пример для именования таблиц и столбцов заглавными буквами. (постгрескл)
//Sql;
create table "Test"
(
"ID" integer,
"NAME" varchar(255)
)
//C#
string sqlCommand = $@"create table ""TestTable"" (
""ID"" integer GENERATED BY DEFAULT AS IDENTITY primary key,
""ExampleProperty"" boolean,
""ColumnName"" varchar(255))";