我在Postgres中有一个表,其模式如下:
create table if not exists cars
(
id bigserial not null,
tyre_code varchar(8)
);
表中tyre_code
的长度最好不超过8个字符。但是,如果有人提供了一个超过8个字符的字符串,Postgres中是否有一种方法可以在表级模式中截断该字符串的值并插入它?我有另一种选择,即截断Java代码中的值并插入它。然而,这并不理想。我更希望我能在表级别上完成。
For example:
tyre_code provided - ABCDEFGHIJK
tyre_code after truncation - ABCDEFGH
我正在使用Postgres,有Spring和Hibernate。任何帮助都将不胜感激!谢谢!
2条答案
按热度按时间yb3bgrhw1#
使用现有的表定义或在添加长度检查约束之后;如果尝试插入超过8个字符的列值;它将向您抛出以下错误:
“值太长”
但是;
您可以使用以下方法实现此目标:
BEFORE INSERT trigger
,具体如下:=========================================================如果您正在寻找添加约束来检查postgresql中的列长度;那么您可以尝试:CHECK约束
这是一个working demo using DBFIDDLE
更简化的方式为:
这是一个working demo
假设您已经有一个表结构,如下所示:
在
alter table
语句中添加额外的约束。ALTER (EXISTING) TABLE DEMO
nfs0ujit2#
将列定义为类型
text
(无长度限制),并使用强制长度的检查约束,然后使用BEFORE
触发器截断值: