在PostgreSQL中插入hstore数组的语法

在PostgreSQL中插入hstore数组的语法,sql,arrays,postgresql,hstore,Sql,Arrays,Postgresql,Hstore,Postgres新手,只是想知道语法会是什么样子。例如,我有下表: CREATE TABLE test ( field1 hstore[], field2 text[], field3 hstore ) ... 对于插入数组,语法如下 INSERT INTO test (field2) VALUES (' {"abc","def"} '); INSERT INTO test (field3) VALUES (' "a"=>1.0, "b"=>2.4 '); 对于插

Postgres新手,只是想知道语法会是什么样子。例如,我有下表:

CREATE TABLE test
(
  field1 hstore[],
  field2 text[],
  field3 hstore
)
...
对于插入数组,语法如下

INSERT INTO test (field2)  VALUES (' {"abc","def"} ');
INSERT INTO test (field3) VALUES (' "a"=>1.0, "b"=>2.4 ');
对于插入hstore,语法如下

INSERT INTO test (field2)  VALUES (' {"abc","def"} ');
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"}' )

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

我认为您将更容易使用:

也可以使用
数组
构造函数语法:

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\""}
请注意,各个商店都用双引号括起来:

"\"a\"=>\"1.0\", \"b\"=>\"2.0\""
它们的内部结构使用反斜杠转义双引号。这给了我们:

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

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

谢谢!这有帮助!这里最好只有一个字符串,而不是一个“数组”结构。我有一些需要字符串的现有代码。请查看我的更新。这是可能的,但有点糟糕。^谢谢!我刚刚发现,我扔掉了里面的双引号,它突然起作用了。只要看看你的更新,我相信它也会起作用的!hstore引号通常仅与“奇数”键一起使用。但是,如果你是以编程方式生成所有这些东西,你会想加入所有的引号和转义等等,以防万一。