小编use*_*645的帖子

如何修改新PostgreSQL JSON数据类型中的字段?

使用postgresql 9.3我可以选择JSON数据类型的特定字段,但是如何使用UPDATE修改它们?我在postgresql文档中或在线任何地方都找不到任何这样的例子.我试过了明显的事:

postgres=# create table test (data json);
CREATE TABLE
postgres=# insert into test (data) values ('{"a":1,"b":2}');
INSERT 0 1
postgres=# select data->'a' from test where data->>'b' = '2';
 ?column?
----------
 1
(1 row)
postgres=# update test set data->'a' = to_json(5) where data->>'b' = '2';
ERROR:  syntax error at or near "->"
LINE 1: update test set data->'a' = to_json(5) where data->>'b' = '2...
Run Code Online (Sandbox Code Playgroud)

postgresql json postgresql-9.3 postgresql-json

199
推荐指数
10
解决办法
18万
查看次数

PHP DateTime :: RFC3339_EXTENDED是否损坏?

我似乎无法DateTime::createFromFormat()在PHP 7.0.26中工作

我的密码

date_default_timezone_set('America/New_York');

$t = '2018-02-23T11:29:16.434Z';
echo '$t: ' . json_encode($t) . PHP_EOL;
$f = DateTime::RFC3339_EXTENDED;
echo '$f: ' . json_encode($f) . PHP_EOL;
echo 'createFromFormat: ' . json_encode(DateTime::createFromFormat($f, $t)) . PHP_EOL;
echo 'getLastErrors: ' . json_encode(DateTime::getLastErrors()) . PHP_EOL;

$t = '2018-02-23T11:29:16.434+00:00';
echo '$t: ' . json_encode($t) . PHP_EOL;
echo 'createFromFormat: ' . json_encode(DateTime::createFromFormat($f, $t)) . PHP_EOL;
echo 'getLastErrors: ' . json_encode(DateTime::getLastErrors()) . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

输出:

$t: "2018-02-23T11:29:16.434Z"
$f: "Y-m-d\\TH:i:s.vP"
createFromFormat: false
getLastErrors: {"warning_count":0,"warnings":[],"error_count":2,"errors":{"20":"The format separator does not match","21":"The …
Run Code Online (Sandbox Code Playgroud)

php datetime datetime-format php-7

7
推荐指数
1
解决办法
1002
查看次数

如何在postgresql 9.3中的JSON类型列上使用JSON运算符

任何人都可以看到为什么这不起作用?根据手册的第9.15节,->操作员应该访问JSON数据类型的元素.它在我看来,虽然信息模式说列是类型'json'它仍然是一个标量字符串(注意它显示时的引号.)

postgres=# create table jtest (id serial, data json);
CREATE TABLE
postgres=# select column_name, data_type from information_schema.columns where table_name = 'jtest';
 column_name | data_type
-------------+-----------
 id          | integer
 data        | json
(2 rows)

postgres=# insert into jtest (data) values (to_json('{"k1": 1, "k2": "two"}'::text));
INSERT 0 1
postgres=# select * from jtest;
 id |              data
----+--------------------------------
  1 | "{\"k1\": 1, \"k2\": \"two\"}"
(1 row)

postgres=# select data->'k1' from jtest;
ERROR:  cannot extract element from a scalar
postgres=# …
Run Code Online (Sandbox Code Playgroud)

postgresql-9.3

6
推荐指数
1
解决办法
7983
查看次数

如何使用 PostgreSQL JSONB_SET() 创建新的深层对象元素

我一定是遗漏了一些东西......似乎JSONB_SET()不像宣传的那样工作?

SELECT JSONB_SET(
    '{"k1": {"value": "v1"}}',
    '{k2,value}',
    '"v2"',
    TRUE
);
Run Code Online (Sandbox Code Playgroud)

结果是:

----+------------------------
    | jsonb_set
    | jsonb
----+------------------------
  1 | {"k1": {"value": "v1"}}
----+------------------------
Run Code Online (Sandbox Code Playgroud)

我期待{"k1": {"value": "v1"}, "k2": {"value": "v2"}} 我也尝试FALSE作为第四个参数,以防它被逆转或其他什么。

我正在使用 PostgreSQL 9.6.4

postgresql jsonb postgresql-9.6

6
推荐指数
2
解决办法
9817
查看次数

“内容不允许在序言中”错误但在 XML 声明之前没有任何内容

首先我已经彻底检查了以下问题,这个问题似乎不是一回事:

这些似乎都归结为两件事:

  1. 开场前有一个或多个(可能不可见)字符 <?xml?>标签。
  2. 正文中有一些字节序列encoding<?xml?>标签中定义的不符。

至于#1,我用 来检查我的文件xxd,结果显示在此处:

$ xxd sample.fo
00000000: 3c3f 786d 6c20 7665 7273 696f 6e3d 2231  <?xml version="1
00000010: 2e30 2220 656e 636f 6469 6e67 3d22 5554  .0" encoding="UT
00000020: 462d 3822 3f3e 5465 7374 206d 6174 6572  F-8"?>Test mater
00000030: 6961 6c20 6963 6f6e 7354 6869 7320 746f  ial iconsThis to
00000040: 7069 6320 7465 7374 7320 7468 6520 …
Run Code Online (Sandbox Code Playgroud)

xml saxon xml-parsing apache-fop

5
推荐指数
1
解决办法
2万
查看次数

迭代postgresql中的json数组元素

我有一个看起来像这样的 json

{
    "elements": [ "element1", "element2", "element3" ]
}
Run Code Online (Sandbox Code Playgroud)

我想迭代它的元素并打印它们。我这样做

do $$
declare
    datajson jsonb := '{
        "elements": [ "element1", "element2", "element3", "element4" ]
    }';
    element varchar(128);
begin
    foreach element in array jsonb_array_elements(datajson->'elements')
    loop
        raise notice '%', element;
    end loop;
end;
$$;
Run Code Online (Sandbox Code Playgroud)

但它因错误而失败query select jsonb_array_elements(datajson->'elements') returned more than one row

问题是什么?

更新

尝试了这个建议:

do $$
declare
    datajson jsonb := '{
        "elements": [ "element1", "element2", "element3", "element4" ]
    }';
    element varchar(128);
begin
    foreach element in array
        SELECT array_agg(jsonb_array_elements) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json plpgsql

3
推荐指数
1
解决办法
1万
查看次数

如何转义 BSD tar 路径替换选项中的字符

这不起作用:

$ tar -cf /tmp/z.tar -C /space/myroot -s '/^\.svn\/patches/__patches' src .svn/patches
tar: Invalid regular expression: trailing backslash (\)
Run Code Online (Sandbox Code Playgroud) 也没有好处:
$ tar -cf /tmp/z.tar -C /space/myroot -s '/^\\.svn\\/patches/__patches' src .svn/patches
tar: Invalid replacement flag _
Run Code Online (Sandbox Code Playgroud) 反斜杠(最多 4 个)和引号的每种组合都会给我带来这两个错误之一。不过我知道第一个在 sed 中有效:
$ tar -cf /tmp/z.tar -C /space/myroot src .svn/patches
$ tar -tf /tmp/z.tar | sed 's/^\.svn\/patches/__patches/'
src/a.c
src/b.c
__patches/A.patch
__patches/B.patch
Run Code Online (Sandbox Code Playgroud) 我也知道我可以逃避并这样做:
$ tar -cf /tmp/z.tar -C /space/myroot -s '/^.svn.patches/__patches' src .svn/patches
Run Code Online (Sandbox Code Playgroud) ——但我真的不想这么做。

bash escaping bsdtar

2
推荐指数
1
解决办法
735
查看次数