Postgres数组数据类型在水线被转换为文本



我需要创建一个应用程序。我们使用PostgreSQL作为底层DB。我们决定使用Postgres的原因是因为我们想要一个关系数据库,因为各种实体和它们之间的关系(这对于像Mongo这样的NoSQL数据库来说似乎不太理想,因为会有多个连接),同时我们想利用Postgres的数组和JSON数据类型的优势,这在MySQL中是不可用的。

我们使用SailsJS框架是因为它简单,内置套接字。io API和我之前(虽然非常有限)的经验与这个框架(MongoDB作为底层DB)。它使用水线作为底层ORM。

Model.query()是一个非常棒的功能,它允许我运行本地SQL查询。

我所面临的问题与定义一个具有Postgres数组数据类型的模型有关。默认情况下,如果签入数据库,列将在DB中更改为文本数据类型。我需要使用postgre的内置数组函数来操纵数组字段。但为此,我需要能够创建具有所需类型的表。我想知道这怎么可能?

在定义Waterline模型时使用json字段类型,例如:

module.exports = {
    attributes: {
        name: 'string',
        my_array: 'json',
        ...etc...
    }
}

可以直接将数组数据保存到模型中,例如:

User.create({name: 'bob', my_array: [1,2,3]}).exec(...);

,它将被底层适配器转换为/从JSON。对于sails-postgresql,它将使用json列类型。

我没有node.js在这里运行,所以它现在不能测试它。但请尝试以下操作:

  1. 使用数组构造函数语法
  2. 正确使用

1)

 SELECT ARRAY[1,2,3+4];

2)

PostgreSQL文档说明:

请记住,您在SQL命令中写入的内容将首先被解释为字符串文字,然后才被解释为数组。这将使所需的反斜杠数量加倍。例如,要插入一个包含反斜杠和双引号的文本数组值,您需要这样写:

INSERT ... VALUES (E'{"\\","\""}');

相关内容

  • 没有找到相关文章

最新更新