Имена столбцов 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))";
Другие вопросы по тегам