Опущение двойной кавычки для выполнения запроса на PostgreSQL

простой вопрос, есть ли способ опустить двойную цитату в PostgreSQL?

вот пример, дав select * from A;, Я получу ERROR: relation "a" does not exist, а я select * from "A"; чтобы получить реальный результат.

есть ли способ не делать второй, а вместо этого делать первый на PostgreSQL?

5 ответов


ваша проблема с этим запросом началась, когда вы создали свою таблицу. При создании таблицы не используйте кавычки.

используйте этот:

CREATE TABLE a ( ... );

не так:

CREATE TABLE "A" ( ... );

последний сделает это так, что вам всегда придется цитировать его позже. Бывшая делает его нормальным именем и вы можете использовать SELECT * FROM a; или SELECT * FROM A;

если вы не можете просто пересоздать таблицу, используйте ALTER TABLE синтаксис:

ALTER TABLE "A" RENAME TO a;

двойные кавычки необходимы, если вы включаете заглавные буквы в свое имя таблицы в postgres

чтобы избежать требований, назовите таблицу "a"


Postgresql имеет некоторые конкретное поведение в отношении цитирования и чувствительности к регистру: он складывает каждый некотированный идентификатор в нижний регистр (также во время создания), а затем работает с учетом регистра.

двойные кавычки в идентификаторах необходимы только тогда, когда имя таблицы (или имя поля или что-то еще) было определено (во время создания схемы) :

  • С прописными буквами (некоторые или все)
  • с цитатами

в этом случае (против чего я советую), вы должны сделать следующее при обращении к нему в запросе:

  • чувствительны к регистру (введите верхний / нижний регистр буквы точно так, как определено)
  • цитаты

в другом случае, вы можете использовать идентификаторы в кавычках (за исключением, если они нужны, конечно) и работают всегда без учета регистра.


Не используйте букву верхнего регистра в имени таблицы или имени столбца, если вы используете такую вещь, то postgres потребует двойной кавычки для доступа к нему.


пожалуйста, смотрите подробное описание того, что происходит здесь.

имена таблиц сервера PostgreSQL чувствительны к регистру, но по умолчанию должны быть строчными: при вводе CREATE TABLE AAA, Он стал CREATE TABLE aaa перед выполнением запроса.

двойные кавычки имена держать их дело, как это было, так что после CREATE TABLE "AaA" вы получили стол AaA и должны писать его дважды цитируется снова и снова.

понятия не имею, почему они так поступают :)