On 10 April 2018 at 23:13, Kyotaro HORIGUCHI <horiguchi.kyot...@lab.ntt.co.jp> wrote: > Note: This is not intended to be committed this time but just for > information. > > At Tue, 10 Apr 2018 10:34:27 +0900 (Tokyo Standard Time), Kyotaro HORIGUCHI > <horiguchi.kyot...@lab.ntt.co.jp> wrote in > <20180410.103427.244142052.horiguchi.kyot...@lab.ntt.co.jp> >> Just adding negation would work as a_expr is doing. >> >> > | '-' a_expr %prec UMINUS >> > { $$ = doNegate($2, @1); } > > a_expr fits partbound_datum_list as is but it cannot sit > side-by-side with MAX/MINVALUE at all. However c_expr can if > columnref is not excluded. The attached patch does that and > partition bound accepts the following syntax. (I didn't see the > transform side at all) > > create table p2c1 partition of p2 for values from (log(1000),0+1,0/1) to (10, > 10, ('1'||'0')::int);
I imagined this would have had a check for volatile functions and some user-friendly error message to say partition bounds must be immutable, but instead, it does: postgres=# create table d_p1 partition of d for values in (Random()); ERROR: specified value cannot be cast to type double precision for column "d" LINE 1: create table d_p1 partition of d for values in (Random()); ^ DETAIL: The cast requires a non-immutable conversion. HINT: Try putting the literal value in single quotes. For inspiration, maybe you could follow the lead of CREATE INDEX: postgres=# create index on d ((random())); ERROR: functions in index expression must be marked IMMUTABLE -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services