sql - 在 PostgreSQL 中插入 hstore 数组的语法

标签 sql arrays postgresql hstore

Postgres 的新手,只是想知道语法是怎样的。例如,我有下表:

CREATE TABLE test
(
  field1 hstore[],
  field2 text[],
  field3 hstore
)
...

对于插入数组,语法是这样的

INSERT INTO test (field2)  VALUES (' {"abc","def"} ');

对于插入 hstore,语法是这样的

INSERT INTO test (field3) VALUES (' "a"=>1.0, "b"=>2.4 ');

但是,对于在“field1”上插入,我该怎么做?像下面这样的东西给我错误:

INSERT INTO test (field1) 
VALUES (`{'"a"=>1.0, "b"=>2.0', '"a"=>3.0, "b"=>4.0' }`)

任何修复?谢谢!

==编辑==


刚刚想通了。

INSERT INTO test (field1) 
VALUES ('{"a=>1.0, b=>2.0", "a=>3.0, b=>4.0"}' )

下面的答案也有帮助,但在这种特殊情况下,字符串(而不是数组结构)更适合我现有的代码。

最佳答案

我认为使用 array constructor syntax 会更轻松:

The ARRAY constructor syntax can also be used:

INSERT INTO sal_emp
    VALUES ('Bill',
    ARRAY[10000, 10000, 10000, 10000],
    ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);

像这样:

INSERT INTO test (field1) 
VALUES (array['"a"=>1.0, "b"=>2.0'::hstore, '"a"=>3.0, "b"=>4.0'::hstore]);

您只需要对数组中的第一个元素进行 ::hstore 转换,但将它们全部转换也没有坏处。

我倾向于专门使用数组构造函数语法,因为所有的字符串解析和引用让我很头疼。

如果不会使用数组构造函数语法,可以问PostgreSQL自己怎么做:

=> select array['"a"=>1.0, "b"=>2.0'::hstore, '"a"=>3.0, "b"=>4.0'::hstore];
                                array                                
---------------------------------------------------------------------
 {"\"a\"=>\"1.0\", \"b\"=>\"2.0\"","\"a\"=>\"3.0\", \"b\"=>\"4.0\""}

请注意,各个 hstores 都用双引号引起来:

"\"a\"=>\"1.0\", \"b\"=>\"2.0\""

并且他们在内部结构中使用反斜杠转义双引号。这给了我们:

INSERT INTO test (field1) 
VALUES ('{"\"a\"=>\"1.0\", \"b\"=>\"2.0\"","\"a\"=>\"3.0\", \"b\"=>\"4.0\""}');

我仍然会尝试使用数组构造函数语法,所有那些嵌套的引号和转义符都很讨厌。

关于sql - 在 PostgreSQL 中插入 hstore 数组的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600120/

相关文章:

SQL 查询 - 表之间的复杂查询

mysql - 将多个 MySQL 记录转换为单个记录

C++,Integer和Char数组转换麻烦

postgresql - Flask-SQLAlchemy 中的自动提交

postgresql - 自上次购买 postgres 以来的天数(每次购买)

sql - 在 Postgres 触发器过程中执行的查询是否在同一事务中运行?

sql - 使用随机值作为连接条件

arrays - 如何将两个 Unicode 字符合并为一个

javascript - 从 API 响应迭代嵌套的 Javascript 对象

sql - 如何使用 date_trunc 函数进行双周分组