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):
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):
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, потому что имя таблицы не имя таблицы, а имя таблицы. например Если в качестве имени таблицы отображается пользователь, то именем таблицы является «пользователь».
Видеть это:
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 пишет: SQL state: 42703 Таблица hobby:
Таблица users:
Запрос, который не получается произвести:
__________________ 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 |
|||||||
Честно говоря, не знаю. Делали задание в классе, там всё получилось, а вот дома — нет, ошибка где-то. Нужно было выполнить запрос:
В классе программа сама предложила дописать запрос в конце, поэтому как раз часть
так и не понял, просто не запомнил, что там написал. 0 |
Аватар 1419 / 887 / 339 Регистрация: 31.05.2012 Сообщений: 3,114 |
||||
09.10.2022, 09:13 |
4 |
|||
0 |
4720 / 3928 / 994 Регистрация: 29.08.2013 Сообщений: 25,187 Записей в блоге: 3 |
|
09.10.2022, 17:40 |
5 |
Делали задание в классе, там всё получилось так голову нужно включать 0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
09.10.2022, 17:40 |
Помогаю со студенческими работами здесь DataGridView. Существует ли столбец? Ошибка — Не существует в пространстве имен, но оно существует! База данных — столбец в таблице не существует Как проверить существует ли столбец в DGV Существует ли в матрице столбец, состоящий только из нулей Существует ли в матрице строка или столбец палиндром Функция определяющая, существует ли столбец матрицы, упорядоченный по возрастанию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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, потому что имя таблицы не имя таблицы, а имя таблицы. например Если в качестве имени таблицы отображается пользователь, то именем таблицы является «пользователь».
Видеть это:
1
Sagar Zala
17 Ноя 2018 в 09:55