I investigated a little more and I found that the problem exists in PG 12 too.
I found that following command scan all partitions:
delete FROM FAC_ITEM WHERE FCODDIST='' AND FSUCURS=1 AND FFECHAI=current_date;
but if I replace current_date by a literal, it prune non necessary partitions and scan only the right partition
delete FROM FAC_ITEM WHERE FCODDIST='' AND FSUCURS=1 AND FFECHAI='2020-11-25';
The following bug has been logged on the website:
Bug reference: 16745
Logged by: Christian Pradelli
Email address: akattunga@gmail.com
PostgreSQL version: 13.1
Operating system: Ubuntu
Description:
Today I upgrade from PG-12 to PG-13
Now I detect that delete does not prune partitions on declarative
partitioned table.
table structure
CREATE TABLE public.fac_item
(
ffacnum integer NOT NULL,
fcoddist character varying(15) COLLATE pg_catalog."default",
fpromoc character varying(1) COLLATE pg_catalog."default",
fvended character varying(15) COLLATE pg_catalog."default",
fcodpro character varying(15) COLLATE pg_catalog."default",
fean character varying(15) COLLATE pg_catalog."default",
fcantid double precision,
ftotal double precision,
ffechai date NOT NULL,
ffechaf date,
fartuni integer,
fimpnum integer,
fsucurs integer,
fpreref numeric(18,6),
fcliint integer,
fdescue double precision,
fvenpre numeric(18,6),
CONSTRAINT pk_fac_item PRIMARY KEY (ffacnum, ffechai)
) PARTITION BY RANGE (ffechai);
If I execute:
select * FROM FAC_ITEM WHERE FCODDIST='' AND FSUCURS=1 AND
FFECHAI=current_date;
it use only one partition
but:
delete FROM FAC_ITEM WHERE FCODDIST='' AND FSUCURS=1 AND
FFECHAI=current_date;
scan all partitions
Is there any regression?