Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не переносятся данные из родительской таблицы в дочерние #192

Closed
qqaazzxxcc opened this issue Mar 22, 2019 · 0 comments

Comments

@qqaazzxxcc
Copy link

Описание проблемы

Добрый день.
При секционировании таблицы по текстовому значению одного из ключей в json, функцией partition_table_concurrently данные из родительской таблицы не переносятся в дочерние.
Ключ, по которому проводится секционирование, может иметь в качестве значения строки любого вида, например: "file", "document" или" journal" и.т.п.
Ниже описаны проделанные шаги:

  1. Подготовка данных
CREATE TABLE "TB_TEST"(
   id character varying(256) NOT NULL, 
   data jsonb NOT NULL,
   CONSTRAINT "TB_TEST_pkey" PRIMARY KEY (id)
);

INSERT INTO "TB_TEST"
SELECT md5(i::text), format('{"object": {"type": "%s", "id": "%s", "i": "%s"}}', 'file_' || (i%10)::text, md5(i::text), i)::jsonb FROM generate_series(1, 99) AS g(i);
  1. Секционирование
SELECT create_range_partitions('"TB_TEST"', '(data->''object''->>''type'')::text', null::text, null::text, 0, false);

SELECT add_range_partition('"TB_TEST"', 'file_3'::text, 'file_3 '::text);
SELECT add_range_partition('"TB_TEST"', 'file_4'::text, 'file_4 '::text);

SELECT * FROM pathman_partition_list;
 parent   |  partition  | parttype |                    expr                     | range_min | range_max
-----------+-------------+----------+---------------------------------------------+-----------+-----------
 "TB_TEST" | "TB_TEST_1" |        2 | ((data -> 'object'::text) ->> 'type'::text) | file_3    | file_3
 "TB_TEST" | "TB_TEST_2" |        2 | ((data -> 'object'::text) ->> 'type'::text) | file_4    | file_4
  1. Перенос данных
SELECT partition_table_concurrently('"TB_TEST"');

SELECT * FROM pathman_concurrent_part_tasks;
  userid  |  pid  |  dbid  |   relid   | processed | status
----------+-------+--------+-----------+-----------+---------
 postgres | 11448 | 184189 | "TB_TEST" |         0 | working

Через какое-то время повторный запрос выдает:

SELECT * FROM pathman_concurrent_part_tasks;
userid | pid | dbid | relid | processed | status
--------+-----+------+-------+-----------+--------
  1. Смотрим count()
SELECT count(*) FROM "TB_TEST_1";
 count
-------
     0
SELECT count(*) FROM "TB_TEST_2";
 count
-------
     0
SELECT count(*) FROM "TB_TEST";
 count
-------
     0

EXPLAIN ANALYZE SELECT count(*) FROM "TB_TEST";
                                                     QUERY PLAN
--------------------------------------------------------------------------------------------------------------------
 Aggregate  (cost=23.50..23.51 rows=1 width=8) (actual time=0.018..0.018 rows=1 loops=1)
   ->  Append  (cost=0.00..22.80 rows=280 width=0) (actual time=0.015..0.015 rows=0 loops=1)
         ->  Seq Scan on "TB_TEST_1"  (cost=0.00..11.40 rows=140 width=0) (actual time=0.010..0.010 rows=0 loops=1)
         ->  Seq Scan on "TB_TEST_2"  (cost=0.00..11.40 rows=140 width=0) (actual time=0.003..0.003 rows=0 loops=1)
 Planning time: 0.316 ms
 Execution time: 0.069 ms

Где данные?

SELECT count(*) FROM ONLY "TB_TEST";
 count
-------
    99

Данные остались в родительской таблице, но видны при этом, только при использовании ONLY

Помогите, пожалуйста, разобраться. Может быть, я что-то не учитываю?
Спасибо!

Environment

SELECT * FROM pg_extension;
  extname   | extowner | extnamespace | extrelocatable | extversion |    extconfig    | extcondition
------------+----------+--------------+----------------+------------+-----------------+--------------
 plpgsql    |       10 |           11 | f              | 1.0        |                 |
 pg_pathman |       10 |         2200 | f              | 1.5        | {184212,184223} | {"",""}
SELECT version();
                           version
--------------------------------------------------------------
 PostgreSQL 9.6.11, compiled by Visual C++ build 1800, 64-bit
SELECT pgpro_edition();
 pgpro_edition
---------------
 standard
SELECT pathman_version();
 pathman_version
-----------------
 1.5.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant