LINUX.ORG.RU

Не могу выполнить UPDATE, DELETE, SELECT через WHERE

 


0

1

При попытке выполнить обновление или удаление строки выдается сообщение об отсутствии поля таблицы. Хотя оно есть. Что я делаю не так?

mgi@mgi-Linux:~$ sudo su postgres [sudo] пароль для mgi: postgres@mgi-Linux:/home/mgi$ psql psql (11.4 (Ubuntu 11.4-1.pgdg18.04+1), сервер 10.9 (Ubuntu 10.9-1.pgdg18.04+1)) Введите «help», чтобы получить справку.

postgres=# \c megriv psql (11.4 (Ubuntu 11.4-1.pgdg18.04+1), сервер 10.9 (Ubuntu 10.9-1.pgdg18.04+1)) Вы подключены к базе данных «megriv» как пользователь «postgres». megriv=# SELECT * FROM formanpa; codForma | textForma ----------+------------------ 11 | Aaaaaaaaaaaaa 22 | Bbbbbbbb 33 | Cccccccccccccccc (3 строки)

megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE codForma = '22'; ОШИБКА: столбец «codforma» не существует СТРОКА 1: ...PDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE codForma =... ^ ПОДСКАЗКА: Возможно, предполагалась ссылка на столбец «formanpa.codForma». megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE formanpa.codForma = '22'; ОШИБКА: столбец formanpa.codforma не существует


Русским же по белому написано:

столбец formanpa.codforma не существует

А вот этот:

formanpa.codForma

скорее всего существует.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple
WHERE formanpa.codForma = '22'; 
ОШИБКА: столбец formanpa.codforma не существует

сдается мне, ты не прав. вангую колонку cod_forma.

bvn13 ★★★★★
()
WHERE "codForma" = '22'

Название столбца в двойные кавычки попробуй.

hippi90 ★★★★★
()

Это всё от того, что ты их транслитом пишешь. И алиасы для таблицы не делаешь в запросе. И код вне тегов [code]

crutch_master ★★★★★
()
Ответ на: комментарий от megriv

Пробуй

UPDATE formanpa SET [textForma] = 'B2b2b2b2b2' WHERE [codForma] = '22

monk ★★★★★
()
mgi@mgi-Linux:~$ sudo su postgres 
[sudo] пароль для mgi: 

postgres@mgi-Linux:/home/mgi$ psql psql 
(11.4 (Ubuntu 11.4-1.pgdg18.04+1), сервер 10.9 (Ubuntu 10.9-1.pgdg18.04+1)) 
Введите «help», чтобы получить справку.

postgres=# \c megriv psql 
(11.4 (Ubuntu 11.4-1.pgdg18.04+1), сервер 10.9 (Ubuntu 10.9-1.pgdg18.04+1)) 
Вы подключены к базе данных «megriv» как пользователь «postgres». 

megriv=# SELECT * FROM formanpa; 
 codForma | textForma 
----------+------------------ 
       11 | Aaaaaaaaaaaaa 
       22 | Bbbbbbbb 
       33 | Cccccccccccccccc 
(3 строки)

megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE codForma = '22'; 
ОШИБКА: столбец «codforma» не существует 
СТРОКА 1: ...PDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE codForma =... 
             ^ ПОДСКАЗКА: Возможно, предполагалась ссылка на столбец «formanpa.codForma». 

megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE formanpa.codForma = '22'; 
ОШИБКА: столбец formanpa.codforma не существует

отформатировал твой говнокод

bvn13 ★★★★★
()
Последнее исправление: bvn13 (всего исправлений: 1)
Ответ на: комментарий от deep-purple

megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE formanpa.codForma = '22';

или

megriv=# UPDATE formanpa SET textForma = 'B2b2b2b2b2' WHERE formanpa.codforma = '22';

- результат один: такого поля (codForma - codforma) нет.

megriv
() автор топика
Ответ на: комментарий от megriv

вам уже объяснили. В названии таблицы(или колонки) соблюдайте регистр букв. Если есть большие буквы (или специальные символы) - помещайте в двойные кавычки.

Другая возможная причина ненахождения таблицы - если она не в схеме по умолчанию. Обычно это схема public. В таком случае надо или указывать схему в явном виде или выбрать другую схему как используемую по умолчанию.

Partisan ★★★★
()
Ответ на: комментарий от Partisan

Спасибо. Вариант с двойными кавычками заработал. Но для меня это новость, т.к. в документации по Postgresql я такого не видел, и в других СУБД тоже не видел.

megriv
() автор топика

camel-case не нужен. Но если очень хочется, то можешь страдать.

AnDoR ★★★★★
()
Ответ на: комментарий от Legioner

необязательно. Есть конструкторы таблиц, например в составе pgAdmin. Они позволяют обойтись без написания оператора CREATE TABLE. После того, как таблица создана в конструкторе, можно посмотреть, какой оператор CREATE TABLE создался для этого, и при желании отредактировать его.

Применять ли большие буквы или пользоваться только маленькими дл экономии «» - решать самостоятельно. Я применяю большие буквы для наглядности, а «» использую всегда для единообразия. Но не вижу смысла затевать спор.

Partisan ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.