On 16/01/2019 08:41, Amit Langote wrote:
> OK, will change it back to partition_bound_expr. Removing "bound" from it
> makes the term ambiguous?
Yeah, let's leave it in.
> How about the following note in the documentation:
>
> + Although volatile expressions such as
> + <literal><function>CURRENT_TIMESTAMP</function></literal> can be used
> + for this, be careful when using them, because
> + <productname>PostgreSQL</productname> will evaluate them only once
> + when adding the partition.
I don't think we have to phrase it in this warning way. Just say that
volatile expressions are evaluated at the time of the DDL statement.
> Sorry but I'm not sure how or what I would test about this. Maybe, just
> add a test in create_table.sql/alter_table.sql that shows that using
> volatile expression doesn't cause an error?
Possibilities: Create a range partition with current_timestamp as the
upper bound and then in a separate transaction insert current_timestamp
and have it appear in the default partition. Or create list partition
with session_user as one partition's value and then insert session_user
and have it appear in that table. Or something like those.
>> I think that needs more refinement. In v8, the following errors
>>
>> CREATE TABLE t2 ( a name COLLATE "POSIX" ) PARTITION BY RANGE (a);
>> CREATE TABLE t2a PARTITION OF t2 FOR VALUES FROM (name 'foo') TO (name
>> 'xyz');
>> ERROR: collation of partition bound value for column "a" does not match
>> partition key collation "POSIX"
>>
>> The problem here is that the "name" type has a collation that is neither
>> the one of the column nor the default collation. We can allow that.
>
> So, should the "name" type's collation should simply be discarded in favor
> of "POSIX" that's being used for partitioning?
In that specific case, yes, I think so.
>> What we don't want is someone writing an explicit COLLATE clause. I
>> think we just need to check that there is no top-level COLLATE clause.
>> This would then sort of match the logic parse_collate.c for combining
>> collations.
>
> Maybe I'm missing something, but isn't it OK to allow the COLLATE clause
> as long as it specifies the matching collation as the parent?
Yes, that should be OK.
--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services