如何限制PostgreSQL HStore中键值对的数量/长度?

时间:2018-01-31 23:14:08

标签: postgresql hstore

我的一个数据库表有一个HStore meta列。

有些用户希望在列中添加任意键(通过REST API调用)来附加任意用户定义的数据。

我主要担心的是一个过大的HStore条目和滥用的可能性(例如:存储任意base64数据或用垃圾数据填充数据库)。

PostgreSQL中是否存在一种机制(在数据库层而不是应用层)来限制HStore列中的键数和条目长度?

1 个答案:

答案 0 :(得分:4)

使用限制键数的检查约束,例如:

create table my_table(
    meta hstore check (cardinality(akeys(meta)) < 3)
);

insert into my_table (meta) values
('a=>1, b=>2, c=>3');

ERROR:  new row for relation "my_table" violates check constraint "my_table_meta_check"
DETAIL:  Failing row contains ("a"=>"1", "b"=>"2", "c"=>"3").

您还可以在文本表示中添加hstore值长度的限制,例如:

create table my_table(
    meta hstore check (cardinality(akeys(meta)) < 3 and length(meta::text) < 200)
);