Ошибка столбец prokind не существует

Nope, that commit doesn;t fix the issue. The issue in hand is that the change of column was made to the base Postgres class that Postgres93 inherits (indirectly from the Postgres94 class), despite the fact the change to PostgreSQL’s own data structure doesnt make that change until version 11, which is the first point at which the column prokind should be used and no earlier.

To elaborate, classes/database/Postgres93.php inherits the class from classes/database/Postgres94.php which inherits the class from classes/database/Postgres.php where you can see several uses of the «prokind» column which doesnt exist for 9.3 or 9.4.

The exact error as presented is:

SQL error:

ERROR:  column p.prokind does not exist
LINE 14:     CASE p.prokind
                  ^
In statement:

			SELECT
				
				p.oid AS prooid,
				p.proname,
				p.proretset,
				pg_catalog.format_type(p.prorettype, NULL) AS proresult,
				pg_catalog.oidvectortypes(p.proargtypes) AS proarguments,
				pl.lanname AS prolanguage,
				pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment,
				p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
				CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns,
				u.usename AS proowner,
				CASE p.prokind
  					WHEN 'a' THEN 'agg'
  					WHEN 'w' THEN 'window'
  					WHEN 'p' THEN 'proc'
  					ELSE 'func'
 				END as protype
			FROM pg_catalog.pg_proc p
				INNER JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
				INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang
				LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner
			WHERE NOT p.prokind = 'a' 
				AND n.nspname = 'http'
			ORDER BY p.proname, proresult

Bug description
On import, an error message is raised from all EnterpriseDB databases: «ERROR: column pr.prokind does not exist». It seems like the reason is that EnterpriseDB has not moved away from proisagg column (like the rest of Postgresql)

How to reproduce
Import any EnterpriseDB 10 database

Expected behavior
Should be able to handle both versions of pg_catalog schemas

Screenshots
If applicable, add screenshots to help explain your problem.

Info about your desktop

  • OS: Windows 10
  • Version: 10.0.17134
  • Window manager:
  • pgModeler version: 0.9.2-alpha1
  • Qt version:

Additional info
Full error text:

[5] src/connection.cpp (415)
  void Connection::executeDMLCommand(const QString&, ResultSet&)
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'
       ** 42703

[4] src/catalog.cpp (414)
  std::vector<std::map<QString, QString> > Catalog::getObjectsNames(std::vector<ObjectType>, const QString&, const QString&, attribs_map, bool)
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'

[3] src/databaseimporthelper.cpp (149)
  std::vector<std::map<QString, QString> > DatabaseImportHelper::getObjects(std::vector<ObjectType>, const QString&, const QString&, attribs_map)
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'

[2] src/databaseimportform.cpp (893)
  static std::vector<QTreeWidgetItem*> DatabaseImportForm::updateObjectsTree(DatabaseImportHelper&, QTreeWidget*, std::vector<ObjectType>, bool, bool, QTreeWidgetItem*, const QString&, const QString&, unsigned int)
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'

[1] src/databaseimportform.cpp (739)
  static void DatabaseImportForm::listObjects(DatabaseImportHelper&, QTreeWidget*, bool, bool, bool, bool, unsigned int)
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'

[0] src/databaseimportform.cpp (332)
  void DatabaseImportForm::listObjects()
    [SQLCommandNotExecuted] Could not execute the SQL command.
 Message returned: `ERROR:  column pr.prokind does not exist
LINE 1: ...namespace AS ns ON pr.pronamespace = ns.oid WHERE pr.prokind...
                                                             ^
HINT:  Perhaps you meant to reference the column "pr.probin".
'

Nope, that commit doesn;t fix the issue. The issue in hand is that the change of column was made to the base Postgres class that Postgres93 inherits (indirectly from the Postgres94 class), despite the fact the change to PostgreSQL’s own data structure doesnt make that change until version 11, which is the first point at which the column prokind should be used and no earlier.

To elaborate, classes/database/Postgres93.php inherits the class from classes/database/Postgres94.php which inherits the class from classes/database/Postgres.php where you can see several uses of the «prokind» column which doesnt exist for 9.3 or 9.4.

The exact error as presented is:

SQL error:

ERROR:  column p.prokind does not exist
LINE 14:     CASE p.prokind
                  ^
In statement:

			SELECT
				
				p.oid AS prooid,
				p.proname,
				p.proretset,
				pg_catalog.format_type(p.prorettype, NULL) AS proresult,
				pg_catalog.oidvectortypes(p.proargtypes) AS proarguments,
				pl.lanname AS prolanguage,
				pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment,
				p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
				CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns,
				u.usename AS proowner,
				CASE p.prokind
  					WHEN 'a' THEN 'agg'
  					WHEN 'w' THEN 'window'
  					WHEN 'p' THEN 'proc'
  					ELSE 'func'
 				END as protype
			FROM pg_catalog.pg_proc p
				INNER JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
				INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang
				LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner
			WHERE NOT p.prokind = 'a' 
				AND n.nspname = 'http'
			ORDER BY p.proname, proresult

Terraform Version

Terraform v0.12.28
Postgres 10.12 (both dockerized and on AWS RDS)

Affected Resource(s)

  • postgresql_grant

Terraform Configuration Files

terraform {
  required_version = "= 0.12.28"
}

locals {
  pg_host = "127.0.0.1"
  pg_port = 5432
}

provider "postgresql" {
  alias = "this"

  host     = local.pg_host
  port     = local.pg_port
  database = "postgres"

  version = "~> 1.7"
}

provider "random" {
  version = "2.2.1"
}

resource "postgresql_database" "db" {
  name             = "foo"
  template         = "template1"
  lc_collate       = "en_US.utf8"
  lc_ctype         = "en_US.utf8"
}

resource "postgresql_role" "rw_username" {
  name                = "bar"
  login               = true
  password            = "quux"
  inherit             = false
  skip_reassign_owned = true # AWS RDS compatibility
}

resource "postgresql_default_privileges" "rw_default_privileges_functions" {
  database    = postgresql_database.db.name
  role        = postgresql_role.rw_username.name
  schema      = "public"
  owner       = "postgres"
  object_type = "function"
  privileges = [
    "EXECUTE",
  ]
}

resource "postgresql_grant" "rw_privileges_functions" {
  database    = postgresql_database.db.name
  role        = postgresql_role.rw_username.name
  schema      = "public"
  object_type = "function"
  privileges = [
    "EXECUTE"
  ]
}

Debug Output

https://gist.github.com/blkt/38f2cb834a00490b97ffde8ac636097b

Panic Output

The error did not result in a panic.

Expected Behavior

Something like the following

foo=# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO bar;
GRANT

Actual Behavior

Error due to missing column.

Steps to Reproduce

Against a local Postgres (e.g. docker):

  1. TF_LOG=DEBUG PGSSLMODE=disable terraform apply

Important Factoids

Nothing worth mentioning.

References

No open issues searching for «prokind»

Terraform Version

Terraform v0.12.28
Postgres 10.12 (both dockerized and on AWS RDS)

Affected Resource(s)

  • postgresql_grant

Terraform Configuration Files

terraform {
  required_version = "= 0.12.28"
}

locals {
  pg_host = "127.0.0.1"
  pg_port = 5432
}

provider "postgresql" {
  alias = "this"

  host     = local.pg_host
  port     = local.pg_port
  database = "postgres"

  version = "~> 1.7"
}

provider "random" {
  version = "2.2.1"
}

resource "postgresql_database" "db" {
  name             = "foo"
  template         = "template1"
  lc_collate       = "en_US.utf8"
  lc_ctype         = "en_US.utf8"
}

resource "postgresql_role" "rw_username" {
  name                = "bar"
  login               = true
  password            = "quux"
  inherit             = false
  skip_reassign_owned = true # AWS RDS compatibility
}

resource "postgresql_default_privileges" "rw_default_privileges_functions" {
  database    = postgresql_database.db.name
  role        = postgresql_role.rw_username.name
  schema      = "public"
  owner       = "postgres"
  object_type = "function"
  privileges = [
    "EXECUTE",
  ]
}

resource "postgresql_grant" "rw_privileges_functions" {
  database    = postgresql_database.db.name
  role        = postgresql_role.rw_username.name
  schema      = "public"
  object_type = "function"
  privileges = [
    "EXECUTE"
  ]
}

Debug Output

https://gist.github.com/blkt/38f2cb834a00490b97ffde8ac636097b

Panic Output

The error did not result in a panic.

Expected Behavior

Something like the following

foo=# GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO bar;
GRANT

Actual Behavior

Error due to missing column.

Steps to Reproduce

Against a local Postgres (e.g. docker):

  1. TF_LOG=DEBUG PGSSLMODE=disable terraform apply

Important Factoids

Nothing worth mentioning.

References

No open issues searching for «prokind»

Using phpPgAdmin v5.6 and PostgreSQL v11.2 on CentOS v7, when I try to access the Functions tab within the public schema, I get the following error:

ERROR:  column p.proisagg does not exist
LINE 18:    WHERE NOT p.proisagg
                      ^
HINT:  Perhaps you meant to reference the column "p.prolang".
Dans l'instruction :

            SELECT
                p.oid AS prooid,
                p.proname,
                p.proretset,
                pg_catalog.format_type(p.prorettype, NULL) AS proresult,
                pg_catalog.oidvectortypes(p.proargtypes) AS proarguments,
                pl.lanname AS prolanguage,
                pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment,
                p.proname || ' (' || pg_catalog.oidvectortypes(p.proargtypes) || ')' AS proproto,
                CASE WHEN p.proretset THEN 'setof ' ELSE '' END || pg_catalog.format_type(p.prorettype, NULL) AS proreturns,
                u.usename AS proowner
            FROM pg_catalog.pg_proc p
                INNER JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
                INNER JOIN pg_catalog.pg_language pl ON pl.oid = p.prolang
                LEFT JOIN pg_catalog.pg_user u ON u.usesysid = p.proowner
            WHERE NOT p.proisagg
                AND n.nspname = 'public'
            ORDER BY p.proname, proresult

Fatal error: Call to a member function recordCount() on integer in /mnt/webdata/websites/applications/pga/classes/Misc.php on line 1949

I get the same error using the df meta-command in psql (version 10.1 as it turns out):

ts_d=> df
ERROR:  column p.proisagg does not exist
LIGNE 6 :   WHEN p.proisagg THEN 'agg'
                 ^
ASTUCE : Perhaps you meant to reference the column "p.prolang".
ts_d=>

The error in those queries seems to be due to a reference to proisagg, a column originally from the pg_proc table in the pg_catalog schema, but which no longer exists in PostgreSQL 11.
See: https://www.postgresql.org/docs/11/release-11.html

Any way to resolve this?

Создаю отношение

create table ПОТРЕБИТЕЛЬ (
    ИДЕНТИФИКАТОР serial not null primary key,
    НАЗВАНИЕ varchar(50) not null,
    "АДРЕС ЖИТЕЛЬСТВА" varchar(255) not null,
    "СКИДКА, %" smallint check ("СКИДКА, %" >= 0 and "СКИДКА, %" <= 100) not null
);

Затем пытаюсь заполнить таблицу, используя значения

insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (001, "АО ВАРЯ", "Сормовский", 10);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (002, "ГАЗ", "Автозаводский", 7);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (003, "МП ВЕРА", "Канавинский", 5);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (004, "МП", "Канавинский", 3);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (005, "АО СТАЛЬ", "Советский", 0);

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

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

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
  Hint: Perhaps you meant to reference the column "countries.Continent".
  Position: 8

Выполненный запрос выглядит следующим образом:

SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5

По сути, это возвращает 5 непустые значения из столбца.

Я не понимаю, почему я получаю сообщение об ошибке «столбец не существует», когда оно явно отображается в pgAdmin 4. Я вижу, что есть схема с именем Network, которая содержит таблицу countries, и эта таблица имеет столбец с именем Continent, как и ожидалось.

Поскольку все имена столбцов, схем и таблиц извлекаются самим приложением, я не думаю, что произошла орфографическая или семантическая ошибка, поэтому почему PostgreSQL вызывает проблемы независимо от? Выполнение запроса в pgAdmin4 и использование предложенного countries.Continent не работает.

Моя версия PostgreSQL на данный момент самая новая:

$ psql --version
psql (PostgreSQL) 9.6.1

Как я могу успешно выполнить запрос?

3 ответа

Лучший ответ

Попробуйте взять его в двойные кавычки — как "Continent" в запросе:

SELECT "Continent"
FROM network.countries
...


23

Eugene Lisitsky
14 Апр 2017 в 08:25

При работе со средой SQLAlchemy, я получил эту ошибку с SQL, как это,

   db.session.execute(
    text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))

ОШИБКА: столбец «Плаза» не существует

Ну, я изменил == на =, ошибка все еще сохраняется, затем я поменял кавычки, как показано ниже. Это сработало. Weird !

.... 
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))


1

ISONecroMAn
7 Авг 2018 в 15:10

Эта проблема возникает потому, что в pgAdmin3, потому что имя таблицы не имя таблицы, а имя таблицы. например Если в качестве имени таблицы отображается пользователь, то именем таблицы является «пользователь».

Видеть это:

image for table user


1

Sagar Zala
17 Ноя 2018 в 09:55

yoimelv

0 / 0 / 0

Регистрация: 16.01.2019

Сообщений: 12

1

08.10.2022, 21:58. Показов 1015. Ответов 4

Метки postgres sql, sql posrgre (Все метки)


Здравствуйте! Не получается объединить таблицы по внешнему ключу. PGadmin пишет:
«ERROR: ОШИБКА: столбец users.fk не существует
LINE 1: SELECT * FROM users INNER JOIN hobby ON users.fk = hobby.pk
^

SQL state: 42703
Character: 41″
Не понимаю в чём проблема. Внешний ключ существует и с ним всё в порядке.

Таблица hobby:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE IF NOT EXISTS public.hobby
(
    id INTEGER NOT NULL DEFAULT NEXTVAL('hobby_id_seq'::regclass),
    hobby_name CHARACTER VARYING COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT hobby_pkey PRIMARY KEY (hobby_name)
        INCLUDE(id)
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public.hobby
    OWNER TO postgres;

Таблица users:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE IF NOT EXISTS public.users
(
    id INTEGER NOT NULL DEFAULT NEXTVAL('users_id_seq'::regclass),
    first_name CHARACTER VARYING COLLATE pg_catalog."default" NOT NULL,
    second_name CHARACTER VARYING COLLATE pg_catalog."default" NOT NULL,
    date_of_birth DATE NOT NULL,
    email CHARACTER VARYING COLLATE pg_catalog."default" NOT NULL,
    hobby CHARACTER VARYING COLLATE pg_catalog."default",
    CONSTRAINT users_pkey PRIMARY KEY (id),
    CONSTRAINT hobby_fkey FOREIGN KEY (hobby)
        REFERENCES public.hobby (hobby_name) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
        NOT VALID
)
 
TABLESPACE pg_default;
 
ALTER TABLE IF EXISTS public.users
    OWNER TO postgres;

Запрос, который не получается произвести:

SQL
1
SELECT * FROM users INNER JOIN hobby ON users.fk = hobby.pk

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

4720 / 3928 / 994

Регистрация: 29.08.2013

Сообщений: 25,187

Записей в блоге: 3

08.10.2022, 22:57

2

а ткните пальцем где именно в таблице users колонка fk

да и pk я не вижу

0

yoimelv

0 / 0 / 0

Регистрация: 16.01.2019

Сообщений: 12

08.10.2022, 23:22

 [ТС]

3

Честно говоря, не знаю. Делали задание в классе, там всё получилось, а вот дома — нет, ошибка где-то. Нужно было выполнить запрос:

SQL
1
SELECT * FROM table1 INNER JOIN table2 ON table1.fk = table2.pk

В классе программа сама предложила дописать запрос в конце, поэтому как раз часть

SQL
1
table1.fk = table2.pk

так и не понял, просто не запомнил, что там написал.

0

Аватар

1419 / 887 / 339

Регистрация: 31.05.2012

Сообщений: 3,114

09.10.2022, 09:13

4

SQL
1
ON users.hobby = hobby.hobby_name

0

4720 / 3928 / 994

Регистрация: 29.08.2013

Сообщений: 25,187

Записей в блоге: 3

09.10.2022, 17:40

5

Цитата
Сообщение от yoimelv
Посмотреть сообщение

Делали задание в классе, там всё получилось

так голову нужно включать
таблицы то соединяются по колонкам, а у вас явное сообщение «столбец users.fk не существует»

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.10.2022, 17:40

Помогаю со студенческими работами здесь

DataGridView. Существует ли столбец?
Как мне узнать, существует ли столбец с заданным именем в DataGridView?
Проверять в цикле не…

Ошибка — Не существует в пространстве имен, но оно существует!
Всем привет! В соседней ветке пытаюсь разобраться как адекватно сделать вертикальную менюшку, но…

База данных — столбец в таблице не существует
pgAdmin 4 выдает ошибку: ERROR: ОШИБКА: столбец &quot;Дискретная математика&quot; в таблице &quot;Экзамены&quot; не…

Как проверить существует ли столбец в DGV
у меня в компоненте грид столбцы создаются динамически, так вот как создать условие которое…

Существует ли в матрице столбец, состоящий только из нулей
Заполнить массив 2 на 5 случайными числами от 0 до 1. вывести «да», если существует столбец,…

Существует ли в матрице строка или столбец палиндром
помогите пожалуйста создать программу для задачи :
существует ли в матрице строка или столбец…

Функция определяющая, существует ли столбец матрицы, упорядоченный по возрастанию
помогите написать ТОЛЬКО ФУНКЦИЮ.
А именно, описать функцию проверки, существует ли в квадратной…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

5

Создаю отношение

create table ПОТРЕБИТЕЛЬ (
    ИДЕНТИФИКАТОР serial not null primary key,
    НАЗВАНИЕ varchar(50) not null,
    "АДРЕС ЖИТЕЛЬСТВА" varchar(255) not null,
    "СКИДКА, %" smallint check ("СКИДКА, %" >= 0 and "СКИДКА, %" <= 100) not null
);

Затем пытаюсь заполнить таблицу, используя значения

insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (001, "АО ВАРЯ", "Сормовский", 10);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (002, "ГАЗ", "Автозаводский", 7);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (003, "МП ВЕРА", "Канавинский", 5);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (004, "МП", "Канавинский", 3);
insert into ПОТРЕБИТЕЛЬ (ИДЕНТИФИКАТОР, НАЗВАНИЕ, "АДРЕС ЖИТЕЛЬСТВА", "СКИДКА, %") values (005, "АО СТАЛЬ", "Советский", 0);

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

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

Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
  Hint: Perhaps you meant to reference the column "countries.Continent".
  Position: 8

Выполненный запрос выглядит следующим образом:

SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5

По сути, это возвращает 5 непустые значения из столбца.

Я не понимаю, почему я получаю сообщение об ошибке «столбец не существует», когда оно явно отображается в pgAdmin 4. Я вижу, что есть схема с именем Network, которая содержит таблицу countries, и эта таблица имеет столбец с именем Continent, как и ожидалось.

Поскольку все имена столбцов, схем и таблиц извлекаются самим приложением, я не думаю, что произошла орфографическая или семантическая ошибка, поэтому почему PostgreSQL вызывает проблемы независимо от? Выполнение запроса в pgAdmin4 и использование предложенного countries.Continent не работает.

Моя версия PostgreSQL на данный момент самая новая:

$ psql --version
psql (PostgreSQL) 9.6.1

Как я могу успешно выполнить запрос?

3 ответа

Лучший ответ

Попробуйте взять его в двойные кавычки — как "Continent" в запросе:

SELECT "Continent"
FROM network.countries
...


23

Eugene Lisitsky
14 Апр 2017 в 08:25

При работе со средой SQLAlchemy, я получил эту ошибку с SQL, как это,

   db.session.execute(
    text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))

ОШИБКА: столбец «Плаза» не существует

Ну, я изменил == на =, ошибка все еще сохраняется, затем я поменял кавычки, как показано ниже. Это сработало. Weird !

.... 
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))


1

ISONecroMAn
7 Авг 2018 в 15:10

Эта проблема возникает потому, что в pgAdmin3, потому что имя таблицы не имя таблицы, а имя таблицы. например Если в качестве имени таблицы отображается пользователь, то именем таблицы является «пользователь».

Видеть это:

image for table user


1

Sagar Zala
17 Ноя 2018 в 09:55

  • Ошибка столбец none не существует
  • Ошибка столбец c relhasoids не существует символ 245
  • Ошибка стоила очень дорого
  • Ошибка студенчество отмечали начало каникул является
  • Ошибка стирания команда scsi отменена