1. 程式人生 > 其它 >postgresql----JSON型別和函式

postgresql----JSON型別和函式

 create table test_ft(id int4,arry VARCHAR[],content1 jsonb,body text);
insert into test_ft values(1,ARRAY [ 'x', 'y' ],'{
"guid": "9c36adc1-7fb5-4d5b-83b4-90356a46balabala",
"name": "james",
"is_active": true,
"company": "Oracle",
"address": "178 Howard Place, Gulf, Washington, 702",
"registered": "2009-11-07T08:53:22 +08:00",
"latitude": 19.793713,
"longitude": 86.513373,
"tags": [
"enim",
"aliquip",
"qui"
]}
','postgresql支援兩種json資料型別:json和jsonb,而兩者唯一的區別在於效率,json是對輸入的完整拷貝,使用時再去解析,所以它會保留輸入的空格,重複鍵以及順序等。而jsonb是解析輸入後儲存的二進位制,它在解析時會刪除不必要的空格和重複的鍵,順序和輸入可能也不相同。使用時不用再次解析。兩者對重複鍵的處理都是保留最後一個鍵值對。效率的差別:json型別儲存快,使用慢,jsonb型別儲存稍慢,使用較快。');

查詢JSON的某個key,如下:

select id,arry, content1->'name',substr(body,1,100) from test_ft t
where t.arry @>'{"x"}' and t.content1 @>'{"name":"james"}'

查詢JSON中某個陣列型別屬性的某個索引等於n的記錄:

select id,arry, content1->'name',substr(body,1,100) from test_ft t
where t.arry @>'{"x"}' 
and t.content1 @>'{"name":"james"}' and t.content1->'tags'->>1='aliquip'

如此以來,所有的key都可以查詢了。

https://www.postgresql.org/docs/current/functions-json.html

https://www.cnblogs.com/alianbog/p/5658156.html

LightDB Enterprise Postgres--金融級關係型資料庫,更快、更穩、更懂金融!