我在为拉斯波茨格雷斯建立一个框架。我需要知道从row.try_get返回的值类型,以获取适当类型的变量中的值。我可以从row.columns()[index].type中获取sql类型,但如果值可以为空就不行了,所以我不能决定将值放入普通类型还是Option<T>中。我只能使用行的内容来理解它,我不能做像“从Postgresql获取表结构”这样的事情。有办法吗?
row.try_get
row.columns()[index].type
Option<T>
hfyxw5xn1#
Column类型不公开任何方法来确定结果列是否可为空的原因是数据库不返回此信息。请记住,结果列是通过运行查询派生的,并且该查询可以包含任意表达式。如果查询是表中列的简单SELECT,则确定列是否可以为空将相当简单。但它也可能是一个非常复杂的表达式,从多个列、子选择甚至自定义函数派生而来。Postgres可以计算出每一列的数据类型,但在一般情况下,它不知道结果列是否可能包含空值。如果您的应用程序只执行简单的查询,并且您知道每个结果列来自哪个表列,那么您可以按如下方式确定该表列是否可以为空:
Column
SELECT
SELECT is_nullable FROM information_schema.columns WHERE table_schema='myschema' AND table_name='mytable' AND column_name='mycolumn';
如果您的查询不是那么简单,那么我建议您总是以Option<T>的形式获得结果,并处理结果可能是None的可能性。
None
1条答案
按热度按时间hfyxw5xn1#
Column
类型不公开任何方法来确定结果列是否可为空的原因是数据库不返回此信息。请记住,结果列是通过运行查询派生的,并且该查询可以包含任意表达式。如果查询是表中列的简单
SELECT
,则确定列是否可以为空将相当简单。但它也可能是一个非常复杂的表达式,从多个列、子选择甚至自定义函数派生而来。Postgres可以计算出每一列的数据类型,但在一般情况下,它不知道结果列是否可能包含空值。
如果您的应用程序只执行简单的查询,并且您知道每个结果列来自哪个表列,那么您可以按如下方式确定该表列是否可以为空:
如果您的查询不是那么简单,那么我建议您总是以
Option<T>
的形式获得结果,并处理结果可能是None
的可能性。