не может заставить работать простую вставку PostgreSQL

83

Я пытаюсь выполнить простую вставку в таблицу postgres, но получаю сообщение об ошибке, что значение, которое я пытаюсь вставить, интерпретируется как имя столбца

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

Где id установлен как первичный ключ и автоматически увеличивается, а не null. Это те поля, которые я отмечал, когда настраивал таблицу в phpPgAdmin.

Однако я получаю эту ошибку:

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

Я заключил имя своей таблицы в двойные кавычки, как я читал здесь .

И используется DEFAULTдля автоматического увеличения идентификатора, как я читал здесь я должен.

Есть идеи? Благодаря!

1252748
источник
14
используйте одинарные кавычки для слова «автодилер».
muratgu
3
Одиночные кавычки. Оставьте идентификатор.
Пол Томблин,
@muratgu, который выдает ошибку:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748
@PaulTomblin, как вы имеете в виду "не использовать идентификатор"? Благодаря!
1252748
Я имею в виду, как это показано в ответе @ Randy. За исключением того, что, похоже, вам также нужны двойные кавычки вокруг имени столбца.
Пол Томблин,

Ответы:

167

'auto dealer'Вместо этого используйте . PostgreSQL интерпретирует "как кавычки для идентификаторов, 'как кавычки для строк.

Также:

  • Если это новый проект, просто не используйте таблицы со смешанным регистром; позже это станет источником разочарования. Вместо того, чтобы иметь возможность использовать любой регистр в своих операторах SQL, вы должны указать имя идентификатора в кавычках и указать правильный регистр.

  • Нет необходимости указывать id/ DEFAULT, вы просите его сделать то, что он уже сделал. Я не встречал СУБД, которая требует, чтобы вы включили columnName/ DEFAULTесли вы хотите, чтобы она поместила значение по умолчанию в столбец, поэтому я не думаю, что эта дополнительная пара KV сделает то, что происходит, более понятным для тех, кто позже читает ваш код .

Мэтт
источник
что дает мне эту ошибкуERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
1
Вероятно, вы создали столбец в смешанном регистре, как и имя таблицы. Вы также должны указать имя столбца, если это так. Перестаньте использовать смешанный регистр в именах, и вы избавите всех от лишней боли.
Мэтт
@Matt Я столкнулся с той же проблемой, и попытка использовать pg с C ++ - это боль, когда мне нужно вводить эти двойные кавычки. Нет ли обходного пути вроде какой-нибудь настройки, которая устраняет необходимость в этих цитатах?
itsols
@itsols Первый пункт «Также» устранит необходимость в кавычках; определяйте свои личности только с помощью [a-z0-9] и не указывайте их как имеющие какой-либо конкретный случай (определяйте без кавычек). Затем вы можете ссылаться на них, как хотите, без кавычек навсегда. Если вы или кто-то другой решили, что действительно важно иметь имена таблиц с пробелами или в верблюжьем регистре, получайте удовольствие от цитирования везде!
Мэтт
Точка взята хорошо, Мэтт ... Думаю, я только что в какой-то мере привык к CamelCase - это было давно (более 20 лет) ... На самом деле проблема не в двойных кавычках (да, было бы проще без него), но настоящая боль заключается в том, чтобы избавиться от них по струнам. Я не ожидал этого, пока не объединил C ++ и pg. В любом случае спасибо за ваш вклад!
itsols
9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

РЕДАКТИРОВАТЬ: добавлены двойные кавычки вокруг имени столбца

Рэнди
источник
1
Привет спасибо. что дает эту ошибку:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
Похоже, вам тоже нужно заключить имя столбца в двойные кавычки. Одна из причин, почему имена таблиц в смешанном регистре в PostgreSQL - плохая идея.
Дэвид Фабер
@DavidFaber да, ты прав. немного затрудняет чтение ... можно ли использовать тире? ^^
1252748
1
@DavidFaber: лично я считаю, что идентификаторы, требующие цитирования (например, смешанный регистр), - плохая идея для любой СУБД
a_horse_with_no_name
1
Имейте в виду, что везде, КРОМЕ создания идентификатора, вы можете ссылаться на него в смешанном регистре и без кавычек. Таким образом, указанная таблица thishasareallylongnameможет быть доступна с помощью select * from thisHasAReallyLongName.
Мэтт
4

Postgres, Oracle и т. Д. Ожидают, что имя столбца будет в кавычках, если они имеют смешанный регистр. Поэтому либо создайте соглашение о всех маленьких или всех заглавных буквах для столбцов таблицы, либо используйте кавычки, как предложил Дэвид Фабер.

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
случайность
источник