Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在smallint中记录uint的PostgreSQL函数_Postgresql_Function_Triggers_Unsigned Integer - Fatal编程技术网

用于在smallint中记录uint的PostgreSQL函数

用于在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-

我想将无符号整数(0到65535)存储到smallint中

我期望的是:

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中。为什么不使用
整数
并创建一个限制值的检查约束?这取决于表中的其他列,但我非常怀疑您是否会看到存储大小和性能上的巨大差异。