我有一个名为“user”的字段,其中包含一个大致如下所示的 json 数组:
"user":
[{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}]
Run Code Online (Sandbox Code Playgroud)
现在我想要一个像这样的查询:
select count from tablename where id = "1"
Run Code Online (Sandbox Code Playgroud)
我无法count从 PostgreSQL 9.4 中的 json 对象数组中获取特定字段。
所以我有一jsonb列有这样的条目:https : //pastebin.com/LxJ8rKk4
有没有办法对整个jsonb列实现全文搜索?
除了在 each 之后进行字符串操作之外JSON_EXTRACT,是否有更简单或更正确的方法来JSON_EXTRACT返回不带引号的字符串?
或者这个问题应该在 StachExchange 上?
我不知道如何更新 PostgreSQL 9.3 数据类型中的元素。
我的例子:
CREATE TABLE "user"
(
id uuid NOT NULL,
password character varying(255),
profiles json,
gender integer NOT NULL DEFAULT 0,
created timestamp with time zone,
connected timestamp with time zone,
modified timestamp with time zone,
active integer NOT NULL DEFAULT 1,
settings json,
seo character varying(255) NOT NULL,
CONSTRAINT id_1 PRIMARY KEY (id)
)
WITH (
OIDS=TRUE
);
ALTER TABLE "user"
OWNER TO postgres;
Run Code Online (Sandbox Code Playgroud)
“配置文件”中的 json 部分
CREATE TABLE "user"
(
id uuid NOT NULL,
password …Run Code Online (Sandbox Code Playgroud) 我不是在谈论动态列,而是在询问原生列 JSON 数据类型。简单来说,我可以在任何 MariaDB 版本上运行以下代码吗?
CREATE TABLE example (names JSON);
Run Code Online (Sandbox Code Playgroud)
据我所知,它没有,但我仍然不确定,因为有很多话题谈论 MariaDB 上的 JSON 支持已经很久了,但没有人说它最终实现了。
- 更新 -
刚刚在 MariaDB Jira 上发现三个关于 JSON 数据类型支持的问题仍然存在,这意味着它还没有实现,对吧?
我已经阅读了 JSON 对象和 JSON 对象类型。我只想做一个选择,它返回 JSON。我不一定要存储 JSON 对象。序列化本身不是我的问题。列是常规的 Varchar、Int 等列,没有 JSON 对象,“普通”数据库行。
我可以执行常规的旧 SELECT 并为 MySQL 返回 JSON 吗?
这不是SQL SERVER 中的FOR JSON和PostgreSQL 中的rows_for_json所做的吗?
他们似乎在这方面领先,但我不想欺骗自己。
我从 2016 年发现了这个问题:https : //stackoverflow.com/questions/35324795/mysql-5-7-return-row-as-json-using-new-json-features
SELECT json_array_elements('["one", "two"]'::json)
Run Code Online (Sandbox Code Playgroud)
给出结果
| json_array_elements | | :------------------ | | “一个” | | “两个” |
我想要相同但没有引号:
one
two
Run Code Online (Sandbox Code Playgroud)
看起来我不能->>在这里使用,因为我在 JSON 中没有字段名称。它只是一个字符串数组。
Postgres 版本:PostgreSQL 10.0 on x86_64-apple-darwin,由 i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (基于 Apple Inc. build 5658) (LLVM build 2336.11.00) 编译,64-少量
我有以下 JSON 对象:
{
"a" : {
"0" : 2,
"1" : 4,
"3" : 6,
},
"b" : {
"2" : 8,
"1" : 10, /*note this key exists in "a" too*/
"4" : 12,
}
}
Run Code Online (Sandbox Code Playgroud)
我想生成以下对象,然后能够像这样从中提取元素:
{
"0" : 2,
"1" : 10,
"2" : 8,
"3" : 6,
"4" : 12,
}
Run Code Online (Sandbox Code Playgroud)
提取:object->>'1'应该返回'10'
基本上,我有两个键可能重叠的数组,我想合并这两个数组,给一个数组优先级。
我怎样才能做到这一点?理想情况下,我会调用一个类似的函数arrayMerge(a, b),它的'a'优先级高于'b'
让我们以表 peoples 为例,它只有 2 个字段:id 和 data(json)。
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Run Code Online (Sandbox Code Playgroud)
我想为“pos”字段创建约束,它必须是唯一的。我在互联网上搜索了 JSON 约束,但没有结果。
我该如何处理这个问题?
是否可以INSERT从SELECT语句DEFAULT中将值放入 PostgreSQL 表并使用空列的值?
就我而言,该SELECT语句是从 JSON 中选择的。
在下面的尝试中,我通过显式检索序列取得了成功,但我希望有一种方法可以使用 DEFAULT 值进行 INSERT。或者选择 DEFAULT 值而不必显式调用默认函数。
-- Example table
create table animals
(
id serial,
nm character varying (30) NOT NULL, --name
typ character varying(10),
tvi integer,
tvf numeric(8,3)
);
insert into animals VALUES (DEFAULT,'mouse','m',4,12.45);
select row_to_json(a) from animals a;
select * from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
--All good.
-- Attempt #1
INSERT INTO animals
select id ,nm,typ,tvi,tvf from json_populate_record(null::animals,'{"id":null,"nm":"mouse","typ":"m","tvi":4,"tvf":12.450}');
/*
ERROR: null value in column "id" violates not-null …Run Code Online (Sandbox Code Playgroud)