Столбец PostgreSQL ‘foo’ не существует

У меня есть таблица с 20 целочисленными столбцами и 1 текстовым столбцом с именем ‘foo’

Если я запустил запрос:

   SELECT * from table_name, где foo имеет значение NULL  

Я получаю сообщение об ошибке:

  ОШИБКА: столбец "foo" не существует  

Я сам убедился, что его столбец действительно существует. Если я сделаю что-то вроде:

  SELECT * from table_name, где count равно NULL  

В результате выводится ‘foo’ как единое целое столбцов …. Я предполагаю, что мне нужно сделать что-то особенное в запросе, потому что foo — текстовый столбец …

Спасибо за помощь (POSTGRESQL 8.3)


Вы случайно создали имя столбца с конечным пробелом и, предположительно, phpPGadmin создал имя столбца в двойных кавычках:

  create table your_table (  "foo" - ...)  

Это даст вам столбец, который выглядел бы так, как будто он везде назывался foo , но у вас был бы чтобы заключить его в двойные кавычки и включать пробел всякий раз, когда вы его используете:

  select ... from your_table, где "foo" не равно null  

Лучше всего использовать в PostgreSQL имена столбцов без кавычек в нижнем регистре. Где-то в phpPGadmin должен быть параметр, который укажет ему не указывать идентификаторы (например, имена таблиц и столбцов), но, увы, я не использую phpPGadmin, поэтому я не знаю, где этот параметр (или даже если он существует).


Если по какой-то причине вы создали имя столбца в смешанном или верхнем регистре, вам необходимо процитируйте его или получите эту ошибку:

  test => create table moo ("FOO" int); CREATE TABLEtest => select * from moo;  FOO ----- (0 строк) test => выберите «foo» из moo; ОШИБКА: столбец «foo» не существует СТРОКА 1: выберите «foo» из moo;  ^ test => _  

Обратите внимание, как в сообщении об ошибке указан регистр в кавычках.


Если по какой-то причине вы создали имя столбца в смешанном или верхнем регистре, вам нужно указать его в кавычках или получить следующую ошибку:

  test => create table moo (  "FOO" int); CREATE TABLEtest => select * from moo;  FOO ----- (0 строк) test => выберите «foo» из moo; ОШИБКА: столбец «foo» не существует СТРОКА 1: выберите «foo» из moo;  ^ test => _  

Обратите внимание, как в сообщении об ошибке указан регистр в кавычках.


PostreSQL, по-видимому, преобразует имена столбцов в нижний регистр в запросе sql — я видел проблемы, когда имена столбцов со смешанным регистром выдают эту ошибку. Вы можете исправить это, заключив имя столбца в кавычки:

  SELECT * FROM table_name, где "Foo" IS NULL  


PostreSQL, по-видимому, преобразует имена столбцов в нижний регистр в запросе sql — я видел проблемы, когда имена столбцов в смешанном регистре выдают эту ошибку. Вы можете исправить это, заключив имя столбца в кавычки:

  SELECT * FROM table_name, где "Foo" IS NULL  

Я исправил это, изменив кавычки ( «) на апостроф () внутри значений. Например:

вставить в грузовики ("id", "datetime") VALUES (862, "10-09-2002 09:15:59");

Делается так:

вставить в грузовики ("id", "datetime") VALUES (862, '10 -09-2002 09:15:59 ');

Предполагая, что datetime столбец — VarChar.


Я исправил это, изменив кавычка ( «) с апострофом () внутри значений. Например:

вставить в грузовики ("id", "datetime") VALUES (862, "10-09-2002 09:15:59");

Становится следующим:

вставить в грузовики ("id", "datetime") VALUES (862, '10 -09-2002 09 : 15: 59 ');

Предполагается, что столбец datetime имеет значение VarChar.


Как другие предлагали в комментариях, это, вероятно, связано с верхним или нижним регистром или некоторыми пробелами в имени столбца. (Я использую ответ, чтобы отформатировать некоторые образцы кода.) Чтобы увидеть, каковы на самом деле имена столбцов, попробуйте выполнить этот запрос:

  SELECT '"' ||  attname || '"', char_length (attname) FROM pg_attribute WHERE attrelid = 'table_name' :: regclass AND attnum> 0 ORDER BY attnum;  

Вероятно, вам также следует проверить свой PostgreSQL журнал сервера, если можете, чтобы увидеть, что он сообщает для оператора.

Если вы укажете идентификатор, все в кавычках является частью идентификатора, включая символы верхнего регистра, окончания строк, пробелы и т. д. и специальные символы. Единственным исключением является то, что два соседних символа кавычек используются как escape-последовательность для одного символа кавычки. Когда идентификатор не заключен в кавычки, все буквы переводятся в нижний регистр. Вот пример нормального поведения:

  test = # create table t (альфа-текст, текст Bravo, текст «Charlie», текст «delta»); CREATE TABLEtest = # select  * from t, где Alpha - ноль;  альфа |  браво |  Чарли |  delta ------- + ------- + --------- + -------- (0 строк) test = # выберите * from t, где bravo равно нулю  ;  альфа |  браво |  Чарли |  delta ------- + ------- + --------- + -------- (0 строк) test = # выберите * from t, где Charlie равен нулю  ; ОШИБКА: столбец "charlie" не существует СТРОКА 1: выберите * из t, где значение Charlie равно нулю;  ^ test = # выберите * из t, где дельта равна нулю; ОШИБКА: столбец «дельта» не существует СТРОКА 1: выберите * из t, где дельта равна нулю;  ^  

Запрос, который я показал вверху, дает следующее:

 ? column?  |  char_length ----------- + ------------- "альфа" |  5 «браво» |  5 «Чарли» |  7 «дельта» |  6 (4 строки)  


Как другие предлагали в комментариях, это, вероятно, вопрос верхнего регистра по сравнению с нижним регистром, или пробел в имени столбца. (Я использую ответ, чтобы отформатировать некоторые образцы кода.) Чтобы увидеть, каковы на самом деле имена столбцов, попробуйте выполнить этот запрос:

  SELECT '"' ||  attname || '"', char_length (attname) FROM pg_attribute WHERE attrelid = 'table_name' :: regclass AND attnum> 0 ORDER BY attnum;  

Вероятно, вам также следует проверить свой PostgreSQL журнал сервера, если можете, чтобы увидеть, что он сообщает для оператора.

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

  test = # create table t (альфа-текст, текст Bravo, текст «Charlie», текст «delta»); CREATE TABLEtest = # select  * from t, где Alpha - ноль;  альфа |  браво |  Чарли |  delta ------- + ------- + --------- + -------- (0 строк) test = # выберите * from t, где bravo равно нулю  ;  альфа |  браво |  Чарли |  delta ------- + ------- + --------- + -------- (0 строк) test = # выберите * from t, где Charlie равен нулю  ; ОШИБКА: столбец «Чарли» не существует СТРОКА 1: выберите * из t, где Чарли - ноль;  ^ test = # выберите * из t, где дельта равна нулю; ОШИБКА: столбец «дельта» не существует СТРОКА 1: выберите * из t, где дельта равна нулю;  ^  

Запрос, который я показал вверху, дает следующее:

 ? column?  |  длина_символа ----------- + ------------- "альфа" |  5 «браво» |  5 «Чарли» |  7 «дельта» |  6 (4 строки)  

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

Столбец выглядел так, как будто он назывался anID , но на самом деле назывался "anID" . Цитаты не появляются в типичных запросах, поэтому их было трудно обнаружить (для этого новичка postgres). Это в postgres 9.4.1.

Подробнее:

Выполнение postgres = # SELECT * FROM test; дало:

  anID |  значение ------ + ------- 1 |  привет 2 |  баз 3 |  foo (3 строки)  

, но попытка выбрать только первый столбец SELECT anID FROM test; привела к ошибке:

  ОШИБКА: столбец "anid" не существует. СТРОКА 1: ВЫБЕРИТЕ ИДЕНТИФИКАТОР ИЗ теста;  ^  

Простой просмотр имен столбцов не помог: postgres = # d test;

   Столбец таблицы "public.test" |  Тип |  Модификаторы -------- + ------------------- + ----------- anID |  целое |  не нулевое значение |  характер меняющийся |  Индексы: "PK on ID" PRIMARY KEY, btree ("anID")  

, но в pgAdmin, если вы щелкните имя столбца и посмотрите на панель SQL, которая заполнена:

  ALTER TABLE test ADD COLUMN "anID" integer; ALTER TABLE test ALTER COLUMN "anID" SET NOT NULL;  

and lo и вот, вокруг названия столбца заключены кавычки. Итак, в конечном итоге postgres = # select "anID" FROM test; отлично работает:

  anID ------ 1 2 3 (  3 строки)  

Та же мораль, без кавычек.


Это могут быть цитаты сами по себе — вот и вся проблема. У меня была аналогичная проблема, и это было связано с кавычками вокруг имени столбца в операторе CREATE TABLE. Обратите внимание, что проблем с пробелами не было, проблемы вызывали только кавычки.

Столбец выглядел так, как будто он назывался anID , но на самом деле назывался "anID" . Цитаты не появляются в типичных запросах, поэтому их было трудно обнаружить (для этого новичка postgres). Это на postgres 9.4.1.

Подробнее:

Выполнение postgres = # SELECT * FROM test; дало:

  anID |  значение ------ + ------- 1 |  привет 2 |  баз 3 |  foo (3 строки)  

, но попытка выбрать только первый столбец SELECT anID FROM test; привела к ошибке:

  ОШИБКА: столбец "anid" не существует. СТРОКА 1: ВЫБЕРИТЕ ИДЕНТИФИКАТОР ИЗ теста;  ^  

Простой просмотр имен столбцов не помог: postgres = # d test;

   Таблица "общедоступная". test "Столбец | Тип | Модификаторы -------- + ------------------- + ----------- anID | integer  | не нулевое значение | меняется символ | Индексы: "PK on ID" PRIMARY KEY, btree ("anID")  

, но в pgAdmin, если вы щелкните имя столбца и посмотрите в панель SQL, которую он заполнил:

  ALTER TABLE test ADD COLUMN "anID" integer; ALTER TABLE test ALTER COLUMN "anID" SET NOT NULL;  

и, о чудо, кавычки вокруг имени столбца. Итак, в конечном итоге postgres = # select "anID" FROM test; отлично работает:

  anID ------ 1 2 3 (3 строки)  

Та же мораль, не используйте кавычки.


проблема возникает из-за того, что имя столбца написано верблюжьим регистром, внутренне он заключает его в «» (двойные кавычки), чтобы решить эту проблему, во время вставки значений в таблицу используйте одинарные кавычки (»)

например, вставьте в schema_name.table_name values ​​(», », »);


проблема возникает из-за имени столбца находится в верблюжьем регистре, внутри он помещает его в «» (двойные кавычки), чтобы решить эту проблему, во время вставки значений в таблицу используйте одинарные кавычки (»)

например вставить в schema_name.table_name values ​​(», », »);


Мы столкнулись с этой проблемой, когда создавали таблицу с помощью клиента phppgadmin. С phppgadmin мы не указывали двойные кавычки в имени столбца, и все же мы столкнулись с той же проблемой.

Если мы создаем столбец с регистром caMel, phpPGAdmin неявно добавляет двойные кавычки вокруг имени столбца. Если вы создадите столбец со строчными буквами, вы не столкнетесь с этой проблемой.

Вы можете изменить столбец в phppgadmin и изменить имя столбца на все строчные буквы, эта проблема исчезнет.


Мы столкнулись с этой проблемой, когда создавали таблицу с помощью клиента phppgadmin. С phppgadmin мы не указывали двойные кавычки в имени столбца, и все же мы столкнулись с той же проблемой.

Если мы создаем столбец с регистром caMel, phpPGAdmin неявно добавляет двойные кавычки вокруг имени столбца. Если вы создадите столбец с нижним регистром, вы не столкнетесь с этой проблемой.

Вы можете изменить столбец в phppgadmin и изменить имя столбца на все строчные буквы, эта проблема исчезнет.


Я исправил аналогичные проблемы, указав имя столбца

  SELECT  * from table_name, где "foo" равно NULL;  

В моем случае это было просто

  SELECT id, "foo" из  table_name;  

без кавычек у меня такая же ошибка.


Я исправил похожие проблемы, указав имя столбца

  SELECT * from table_name, где "foo  "равно NULL;  

В моем случае это было просто

  SELECT id," foo "from table_name;   

без кавычек я получил ту же ошибку.


Я также запустил в эту ошибку, когда я использовал Dapper и забыл ввести параметризованное значение.

Чтобы исправить это, мне нужно было убедиться, что объект, переданный в качестве параметра, имел свойства, соответствующие параметризованным значениям в строке SQL.


Я также столкнулся с этой ошибкой, когда использовал Dapper и забыл ввести параметризованное значение.

Чтобы fix Мне нужно было убедиться, что объект, переданный в качестве параметра, имел свойства, соответствующие параметризованным значениям в строке SQL.


В моем случае, когда я запускаю запрос выбора, он работает и дает желаемые данные. Но когда я запускаю запрос типа

  select * from users where email = "user@gmail.com"  

Он показывает это error

  ОШИБКА: столбец "user@gmail.com" не существует СТРОКА 2: выберите * из пользователей, где email = "user@gmail.com ... ^ Состояние SQL:  42703Character: 106  

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

  select  * от пользователей, у которых email = 'user@gmail.com'  


В моем случае, когда я запускаю запрос выбора, он работает и дает требуемые данные. Но когда я запускаю запрос типа

  select * from users where email = "user@gmail.com"  

Он показывает эту ошибку

  ОШИБКА: столбец "user@gmail.com" не существует СТРОКА 2: выберите * из пользователей, где email = "user@gmail.com ... ^  Состояние SQL: 42703 Символ: 106  

Тогда я использую одинарные кавычки вместо двойных qu Обратите внимание на условия совпадения, это работает. например,

  выберите * from users, где email = 'user@gmail.com'  

Оцените статью
techsly.ru
Добавить комментарий