Что такое values
create table test_1 partition of test for values from (0) to (1); # select relname, pg_get_expr(relpartbound, oid) from pg_class where relispartition and relname~'test' order by relname; relname | pg_get_expr ---------+-------------------------------- test_1 | FOR VALUES FROM ('0') TO ('1')
а test как выглядит?
CREATE TABLE IF NOT EXISTS test ( id text NOT NULL, v1 bigint NOT NULL, v2 bigint NOT NULL, ) PARTITION BY RANGE (((v1 + v2) % 10));
интересно, по int не добавляет кавычки, а по bigint — добавляет :-)
При этом вставляет-то правильно ) Но попробую скастить до инта.
да зачем? expr — это же от expression, просто синтаксис выражения такой, с кавычками
В там разные в итоге на AST?
А как проверить?
А вдруг с селектом поможет )
select по Partition constraint смотрит
\d+ test_1 что показывает?
# \d+ test_1; Table "public.test_1" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description -------------+--------+-----------+----------+---------+----------+--------------+------------- id | text | | not null | | extended | | v1 | bigint | | not null | | plain | | v2 | bigint | | not null | | plain | | Partition of: test FOR VALUES FROM ('0') TO ('1') Partition constraint: ((((v1 + v2) % '10'::bigint) IS NOT NULL) AND (((v1 + v2) % '10'::bigint) >= '0'::bigint) AND (((v1 + v2) % '10'::bigint) < '1'::bigint)) Access method: heap
ну вот where у select должен в это условие попадать: Partition constraint: ((((v1 + v2) % '10'::bigint) IS NOT NULL) AND (((v1 + v2) % '10'::bigint) >= '0'::bigint) AND (((v1 + v2) % '10'::bigint) < '1'::bigint)) что бы исключение партиций сработало
Эм в это точно партиции а не наследование ?
Я уже забыл, что такое наследование, так что точно - партиции.
Обсуждают сегодня