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/