在PostgreSQL中插入hstore数组的语法
Postgres新手,只是想知道语法会是什么样子。例如,我有下表:在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 '); 对于插
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引号通常仅与“奇数”键一起使用。但是,如果你是以编程方式生成所有这些东西,你会想加入所有的引号和转义等等,以防万一。