限制PostgreSQL HStore中键值对的数量/长度的方法?
Ways to limit the number / length of key-value pairs in PostgreSQL HStore?
我的一个数据库表有一个 HStore meta
列。
一些用户希望向列添加任意键(通过 REST API 调用)以附加任意用户定义的数据。
我主要担心的是过大的 HStore 条目和滥用的可能性(例如:存储任意 base64 数据或用垃圾数据填充数据库)。
PostgreSQL 中是否有一种机制(在数据库层,而不是应用程序层)来限制 HStore 列中键的数量和条目的长度?
使用限制键数量的检查约束,例如:
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)
);
我的一个数据库表有一个 HStore meta
列。
一些用户希望向列添加任意键(通过 REST API 调用)以附加任意用户定义的数据。
我主要担心的是过大的 HStore 条目和滥用的可能性(例如:存储任意 base64 数据或用垃圾数据填充数据库)。
PostgreSQL 中是否有一种机制(在数据库层,而不是应用程序层)来限制 HStore 列中键的数量和条目的长度?
使用限制键数量的检查约束,例如:
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)
);