Опуская двойную кавычку для запроса на PostgreSQL
Простой вопрос: можно ли опустить двойную кавычку в PostgreSQL?
Вот пример, дающий select * from A;
, я извлечу ERROR: relation "a" does not exist
, и мне нужно было бы дать select * from "A";
, чтобы получить реальный результат.
Есть ли способ не делать второй и вместо этого делать первый на PostgreSQL?
Ответы
Ответ 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
и должны снова и снова ее записывать дважды.
Не знаю, почему они это сделали:)