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
为什么使用Knex.js选择PostgreSQL interval会返回JSON或JavaScript对象而不是字符串?_Sql_Postgresql_Intervals_Knex.js - Fatal编程技术网

为什么使用Knex.js选择PostgreSQL interval会返回JSON或JavaScript对象而不是字符串?

为什么使用Knex.js选择PostgreSQL interval会返回JSON或JavaScript对象而不是字符串?,sql,postgresql,intervals,knex.js,Sql,Postgresql,Intervals,Knex.js,我有一个PostgreSQL表,它有一个interval类型的列,它以ISO 8601格式存储一个持续时间,即P1D等于“1天” 我遇到的问题是,当使用Knex.js从数据库中选择此数据时,数据将从字符串P1D转换为JSON对象{“days”:1},如果我在命令行界面中执行相同的基本select查询,我将返回字符串P1D,并且可以选择设置输出的样式set intervalStyle=iso_8601 据我所知,这是由Knex.js的一个称为“node pg types”的依赖项实现的,该依赖项反

我有一个PostgreSQL表,它有一个
interval
类型的列,它以ISO 8601格式存储一个持续时间,即
P1D
等于“1天”

我遇到的问题是,当使用Knex.js从数据库中选择此数据时,数据将从字符串
P1D
转换为JSON对象
{“days”:1}
,如果我在命令行界面中执行相同的基本select查询,我将返回字符串
P1D
,并且可以选择设置输出的样式
set intervalStyle=iso_8601

据我所知,这是由Knex.js的一个称为“node pg types”的依赖项实现的,该依赖项反过来使用“postgresinterval”。在Bookshelf.js中,您可以设置一个数据处理器,在直接使用“pg”模块时,您可以设置不同类型的行为,但是在这方面,如何修改Knex.js的行为还不清楚,而Bookshelf.js可以做到这一点,并且是基于Knex.js构建的


简而言之,我的问题是如何让Knex.js在间隔列上输出ISO 8601样式的间隔,而不是JSON对象?

通过我的研究发现,从一个模块跳到另一个模块,Knex.js确实使用了“节点pg类型”来格式化间隔列,而这反过来又使用了“postgres interval”,两个模块都没有很好地记录这一点

在查看“postgres interval”时,很明显返回的数据是一个JavaScript对象,该对象被编码为类似于JSON的内容,但是在阅读该模块的文档时,它实际上具有一些函数,您可以调用这些函数以获取任何格式的数据:

interval.toPostgres()->字符串 返回一个间隔字符串。这允许将interval对象传递到准备好的语句中

interval.toISO()->字符串 返回符合ISO 8601的字符串

因此,答案是在代码中附加
.toISO()

我将通知开发人员,这个特定的行为没有很好的文档记录,因此他们可以提高对Knex.js如何将一些工作传递给其他模块的认识,这些模块也会传递工作,但是我写了这个自我回答的问题,所以其他人不必花费无数的时间来尝试解决这个问题