Подтвердить что ты не робот

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

Простой вопрос: можно ли опустить двойную кавычку в PostgreSQL?

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

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

4b9b3361

Ответ 1

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

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

CREATE TABLE a ( ... );

Не это:

CREATE TABLE "A" ( ... );

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

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

ALTER TABLE "A" RENAME TO a;

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Не знаю, почему они это сделали:)