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' }`)
任何修复?谢谢!
== EDIT ==
刚想通了。
INSERT INTO test (field1)
VALUES ('{"a=>1.0, b=>2.0", "a=>3.0, b=>4.0"}' )
下面的答案也有帮助,但在这种特殊情况下,字符串(而不是数组结构)可以更好地利用现有代码。
答案 0 :(得分:5)
我认为您使用array constructor syntax:
会更容易也可以使用
ARRAY
构造函数语法: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\""}
请注意,各个hstore用双引号括起来:
"\"a\"=>\"1.0\", \"b\"=>\"2.0\""
并且他们使用反斜杠转义的双引号作为其内部结构。这给了我们:
INSERT INTO test (field1)
VALUES ('{"\"a\"=>\"1.0\", \"b\"=>\"2.0\"","\"a\"=>\"3.0\", \"b\"=>\"4.0\""}');
我仍然尝试使用数组构造函数语法,所有那些嵌套的引号和转义都是讨厌的。