не может заставить работать простую вставку 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для автоматического увеличения идентификатора, как я читал здесь я должен.

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


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')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.