и в нем использую pgr_dijkstra
Получаю ошибку:
SQL Error [42P01]: ERROR: relation "pg_prepared_statements" does not exist
Куда копать, куда смотреть?
Search_path?
show search_path выдаёт: public,tgtax tgtax- моя схема
Ну, можэшь pg_catalog добавить. Хотя странно это, конечно. Зачем обращаться к системной вьюхе не по полному имени? Слушай, а она у тебя вообще есть -- pg_catalog.pg_prepared_statements? Этому пользователю -- доступна на чтение?
Спасибо тебе добрый человек, нет у меня pg_catalog. Я делал бекап pg_dump и переносил базу на новый сервак. И pg_catalog не развернулся из бекапа, много ошибок, остальные таблицы перенеслись нормально. Pg_catalog как-то можно по новой создать или из бекапа только?
pg_catalog — это системное, оно не бэкапится и не восстанавливается
Не понял. А что же делать? Я создал новую БД и залил в неё бекап. Что я сделал не так?
Этот pg_catalog создается автоматически при создании новой БД?
pg_catalog не разворачивается из дампа. Он создаётся при createdb (из template1).
И это схема, там пачка таблиц в ней. Впрочем, без неё -- вам бы ни из какой таблицы ничего выбрать не получилось, так что pg_catalog как таковой у вас, безусловно, есть.
Получается что если в дампе есть drop database; create database - то он должен быть?
Я в dbeaver создаю новую базу, в ней есть схема public и больше ничего. Где же pg_catalog? Он не отображается?
Понятия не имею, как это выглядит в dbeaver. Подключитесь через psql, для начала.
Зашёл в psql, потом create database test. В схемах этой базы только рublic. Что не так делаю?
Может права какие-то надо прописать. Подскажи где и как?
\dS , для начала.
Schema | Name | Type | Owner ------------+----------------------------+-------+---------- pg_catalog | pg_aggregate | table | postgres pg_catalog | pg_am | table | postgres pg_catalog | pg_amop | table | postgres pg_catalog | pg_amproc | table | postgres pg_catalog | pg_attrdef | table | postgres pg_catalog | pg_attribute | table | postgres pg_catalog | pg_auth_members | table | postgres pg_catalog | pg_authid | table | postgres pg_catalog | pg_backend_memory_contexts | view | postgres pg_catalog | pg_cast | table | postgres pg_catalog | pg_class | table | postgres ..... Дальше ещё инфа \dn+ Показаны все схемы в БД, public есть, pg_catalog нету
Как это нету -- когда вот она, как минимум в списке таблиц?
Есть pg_catalog, owner у него postgres. А у моей схемы owner другой, я создал пользователя другого. В этом проблема? Что нужно сделать?
Я пока не уверен, что есть проблема. SELECT на ту таблицу работает? (Какая у тебя там была?)
Да, select * from table работает. Но как только хочу использовать функцию из pg_routing: pgr_dijkstra вылетает ошибка pg_prepared_statements not exist. В функции pgr_dijkstra вызывается pg_prepared_statements: CREATE OR REPLACE FUNCTION tgtaxi._pgr_get_statement(o_sql text) RETURNS text LANGUAGE plpgsql STABLE STRICT AS $function$ DECLARE sql TEXT; BEGIN EXECUTE 'SELECT statement FROM pg_prepared_statements WHERE name =' quote_literal(o_sql) ' limit 1 ' INTO sql; IF (sql IS NULL) THEN RETURN o_sql; ELSE RETURN regexp_replace(regexp_replace(regexp_replace(sql, '\s(as)\s', '_foo_', 'i'), '^.*_foo_', '','i'), ';$', ''); END IF; END $function$ ;
В выводе этой команды должен быть pg_catalog.pg_prepared_statements, правильно? Там нет такого. Или у меня прав нет, поэтому не вижу. .... pg_catalog | pg_operator | table | postgres pg_catalog | pg_opfamily | table | postgres pg_catalog | pg_partitioned_table | table | postgres pg_catalog | pg_policy | table | postgres pg_catalog | pg_proc | table | postgres pg_catalog | pg_publication | table | postgres pg_catalog | pg_publication_rel | table | postgres pg_catalog | pg_range | table | postgres pg_catalog | pg_replication_origin | table | postgres ....
Да, правильно. SELECT * FROM pg_prepared_statements; что говорит?
Если прав нет -- подсоединитесь суперпользователем и проверьте ещё раз.
Зашёл так: sudo -i -u postgres Select stаtement from pg_prepared_statements - отработал нормально Переключаюсь на мою базу: \с my_db Выполняю тот же селект и ошибка: relation pg_prepared_statements does not exist Я же зашёл под пользователем postgres, это же superuser? Что ему надо?
Чаще всего -- да, суперюзер. Но лучшэ проверить через \dg. Теперь начинай проверять, есть ли эта таблицы в template1 и template0. Если нет в обоих -- лучшэ переиницыализировать кластер. Если есть в template0, нет в template1 -- ну, можно переиницыализировать template1 из template0.
Обсуждают сегодня