用于在smallint中记录uint的PostgreSQL函数
我想将无符号整数(0到65535)存储到smallint中 我期望的是:用于在smallint中记录uint的PostgreSQL函数,postgresql,function,triggers,unsigned-integer,Postgresql,Function,Triggers,Unsigned Integer,我想将无符号整数(0到65535)存储到smallint中 我期望的是: CAST(($1 - 32768) AS smallint) 我的桌子有一列 version smallint NOT NULL 如何插入mytable集合(1)并且它将记录-32767 当我从myTable中选择版本时它将返回1?您可以在表的顶部创建一个视图,该视图选择(version+32768)作为version(视图的此列将是int类型。您也可以添加显式强制转换)。然后,您应该查询此视图而不是原始表,以获取0-
CAST(($1 - 32768) AS smallint)
我的桌子有一列
version smallint NOT NULL
如何插入mytable集合(1)代码>并且它将记录-32767
当我从myTable中选择版本时
它将返回1?您可以在表的顶部创建一个视图,该视图选择(version+32768)作为version
(视图的此列将是int类型。您也可以添加显式强制转换)。然后,您应该查询此视图而不是原始表,以获取0-65535之间的值
例如:
CREATE VIEW myTableView AS SELECT col1, col2, (version::int + 32768) as version FROM myTable;
现在,selectversionfromtmytableview
将返回0到65535之间的值
对于INSERT,您可以为myTableView创建一个而不是INSERT
触发器,该触发器将(版本-32768)::smallint插入myTable。这应该很容易,但我现在不能测试它,所以我不给一个样本 smallint应该能够根据PostgreSQL文档获取-32768到+32767的值。。您的表到底是什么样子的?您想实现什么?我想在查询中给出uint并将uint存储在smallint中。为什么不使用整数
并创建一个限制值的检查约束?这取决于表中的其他列,但我非常怀疑您是否会看到存储大小和性能上的巨大差异。