postgrespro/pg_pathman

unrecognized node type: 375

Guzya opened this issue · 4 comments

Guzya commented

Problem description

Выполняю пример из доки по диапазонному секционированию и получаю ошибку.

CREATE TABLE journal (
id SERIAL,
dt TIMESTAMP NOT NULL,
level INTEGER,
msg TEXT);

-- добавление в таблицу некоторых данных
INSERT INTO journal (dt, level, msg)
SELECT g, random() * 6, md5(g::text)
FROM generate_series('2015-01-01'::date, '2015-12-31'::date, '1 minute') as g;

-- секционирование таблицы по диапазонам
SELECT create_range_partitions('journal', 'dt', '2015-01-01'::date, '1 month'::interval);

ERROR: unrecognized node type: 375
КОНТЕКСТ: PL/pgSQL function create_range_partitions(regclass,text,anyelement,interval,integer,boolean) line 63 at assignment

Environment

partitions=# SELECT * FROM pg_extension;
extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
------------+----------+--------------+----------------+------------+-----------------+--------------
plpgsql | 10 | 11 | f | 1.0 | |
pg_pathman | 10 | 2200 | f | 1.5 | {860666,860677} | {"",""}

                                                  version                                                       

PostgreSQL 11.11 (Debian 11.11-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
(1 строка)

partitions=# SELECT get_pathman_lib_version();
ERROR: function get_pathman_lib_version() does not exist
СТРОКА 1: SELECT get_pathman_lib_version();
^
ПОДСКАЗКА: No function matches the given name and argument types. You might need to add explicit type casts.

partitions=# \df pathm
Список функций
Схема | Имя | Тип данных результата | Типы данных аргументов | Тип
--------+------------------------------------+-----------------------+-------------------------------------------------------------+-------
public | add_to_pathman_config | boolean | parent_relid regclass, expression text | функ.
public | add_to_pathman_config | boolean | parent_relid regclass, expression text, range_interval text | функ.
public | disable_pathman_for | void | parent_relid regclass | функ.
public | pathman_config_params_trigger_func | trigger | | функ.
public | pathman_ddl_trigger_func | event_trigger | | функ.
public | pathman_set_param | void | relation regclass, param text, value anyelement | функ.
public | pathman_version | cstring | | функ.
(7 строк)

К сожалению, у меня нет Debian.
Попробовал воспроизвести проблему на текущей ветке REL_11_STABLE (PostgreSQL 11.14) под Windows 10 Pro (21H2 19044.1466) и под Ubuntu 20.04.3 LTS:

  1. Исходники PostgreSQL взял отсюда:
git clone git://git.postgresql.org/git/postgresql.git
git checkout REL_11_STABLE
  1. Исходники pg_pathman взял отсюда:
git clone https://github.com/postgrespro/pg_pathman
  1. После сборки (PostgreSQL + pg_pathman) создал новую базу данных, прописал "shared_preload_libraries='pg_variables'" в файле postgresql.conf и выполнил скрипт:
CREATE EXTENSION pg_pathman;

SELECT version();
SELECT pathman_version();

CREATE TABLE journal (
id SERIAL,
dt TIMESTAMP NOT NULL,
level INTEGER,
msg TEXT);

-- добавление в таблицу некоторых данных
INSERT INTO journal (dt, level, msg)
SELECT g, random() * 6, md5(g::text)
FROM generate_series('2015-01-01'::date, '2015-12-31'::date, '1 minute') as g;

-- секционирование таблицы по диапазонам
SELECT create_range_partitions('journal', 'dt', '2015-01-01'::date, '1 month'::interval);

DROP TABLE journal CASCADE;
DROP EXTENSION pg_pathman;
  1. В результате ошибок не увидел - ниже результат для Windows (для Ubuntu результат похожий):
CREATE EXTENSION
                           version                           
-------------------------------------------------------------
 PostgreSQL 11.14, compiled by Visual C++ build 1929, 64-bit
(1 row)

 pathman_version 
-----------------
 1.5.12
(1 row)

CREATE TABLE
INSERT 0 524161
 create_range_partitions 
-------------------------
                      12
(1 row)

DROP TABLE
DROP EXTENSION
  1. Нужны дополнительные данные, которые бы позволили воспроизвести ошибку (в идеале - тестовый пример, генерирующий ошибку) ...
Guzya commented

Там вряд ли дело в debian, у нас на прод debian 9 и работает все нормально.
А тут я решил доп. тестирование по одной из задач провести, в связи с чем развернул на своем тестовом сервере pg_pathman, а он ошибку кидает. На еще одном тестовом сервере попытался и там та же проблема.

На втором тестовом (аналогичен первому) та же ситуация

db1=# create extension pg_pathman ;
CREATE EXTENSION
db1=# 
db1=# CREATE TABLE journal (
db1(# id SERIAL,
db1(# dt TIMESTAMP NOT NULL,
db1(# level INTEGER,
db1(# msg TEXT);
CREATE TABLE
db1=# 
db1=# -- добавление в таблицу некоторых данных
db1=# INSERT INTO journal (dt, level, msg)
db1-# SELECT g, random() * 6, md5(g::text)
db1-# FROM generate_series('2015-01-01'::date, '2015-12-31'::date, '1 minute') as g;
INSERT 0 524161
db1=# SELECT create_range_partitions('journal', 'dt', '2015-01-01'::date, '1 month'::interval);
ОШИБКА:  unrecognized node type: 375
КОНТЕКСТ:  функция PL/pgSQL create_range_partitions(regclass,text,anyelement,interval,integer,boolean), строка 63, оператор присваивание
db1=# 

Включил debug5, прикрепляю кусок лога.

2022-01-16 19:12:00.543 MSK [7806] postgres@db1 ОТЛАДКА:  создание индекса "pg_toast_407486_index" для таблицы "pg_toast_407486" в непараллельном режиме
2022-01-16 19:12:00.543 MSK [7806] postgres@db1 КОНТЕКСТ:  функция PL/pgSQL create_range_partitions(regclass,text,anyelement,interval,integer,boolean), строка 63, оператор присваивание
2022-01-16 19:12:00.547 MSK [7806] postgres@db1 ОШИБКА:  unrecognized node type: 375

postgres.log.gz

Можно Вас попросить написать полную версию Debian и каким образом Вы устанавливали Postgresql и pg_pathman (из каких пакетов, или, если собирали сами - из каких исходников)?
Это нужно для повторения сборки на тестовой машине.

Guzya commented

Проблема решилась, установкой из исходников непосредственно на серверах.

До того pg_pathman ставился из пакета собранного для размещения в нашем локальном репозитории (исходники те же).
Удалил этот пакет, скачал исходники и поставил ч\з

make install USE_PGXS=1

Большое спасибо за помощь!!!