Я включил ведение журнала запросов и смог найти ошибочную «вставку»:
insert into "myschema"."mytable" ("custcode", "custcar", "custdob", "closed") values ('a33113f2-930c-47de-95a6-b9e07650468a', 'hellow world', '2020-02-02 01:00:00+00:00', 'f')
Это разделенная таблица в столбце «custdob» со следующими разделами:
\d+ mytable
Table "myschema.mytable"
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
------------+--------------------------+-----------+----------+----------------------------------------+----------+--------------+-------------
id | bigint | | not null | nextval('mytable_id_seq'::regclass) | plain | |
custcode | uuid | | not null | | plain | |
custcar | character varying | | not null | | extended | |
custdob | timestamp with time zone | | not null | | plain | |
closed | boolean | | not null | false | plain | |
Partition key: RANGE (custdob)
Partitions: mytable_201902_partition FOR VALUES FROM ('2019-02-01 00:00:00+00') TO ('2019-03-01 00:00:00+00'),
mytable_201903_partition FOR VALUES FROM ('2019-03-01 00:00:00+00') TO ('2019-04-01 00:00:00+00'),
mytable_201908_partition FOR VALUES FROM ('2019-08-02 00:00:00+00') TO ('2019-09-01 00:00:00+00'),
mytable_202003_partition FOR VALUES FROM ('2020-03-01 00:00:00+00') TO ('2020-04-01 00:00:00+00'),
mytable_202004_partition FOR VALUES FROM ('2020-04-01 00:00:00+00') TO ('2020-05-01 00:00:00+00'),
mytable_000000_partition DEFAULT
Обратите внимание, что INSERT хочет вставить в раздел февраля, но на моем CI-сервере отсутствует раздел, поэтому он должен вставить строку в раздел DEFAULT. Проблема в том, что раздел DEFAULT имеет следующее ограничение:
"mytable_partition_check" CHECK (custdob < '2019-08-02 00:00:00+00'::timestamp with time zone)
Так что Postgres, похоже, попадает в ошибку, потому что не может вставить запись за февраль, пока там есть это ограничение. Если я откажусь от этого ограничения и перезапущу нарушающую вставку, на этот раз это сработает.