2015-09-05 30 views
1

問題UPDATE PSQL表中JSON

column json 
{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"}, 
{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"}, 
{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"} 


column name 
default_animal 
default_animal 
default_animal 

column name 
Tiger 
Panda 
Lion 

描述:

在表名動物,一列 「JSON」 包含所有相關數據。 (所有可用的「animal_name」) 但是「名稱」列還應該包含相關的animal_name - 不是「default_animal」。

什麼是解決此任務最有效的方法?

回答

1
CREATE TABLE animals (id SERIAL PRIMARY KEY,name TEXT,jsondata JSON); 

INSERT INTO animals(name,jsondata) VALUES 
    ('default_animal','{"size": 120, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Tiger"}'::JSON), 
    ('default_animal','{"size": 200, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Panda"}'::JSON), 
    ('default_animal','{"size": 300, "family": 5, "colour": 5552, "continent": 2, "animal_name": "Lion"}'::JSON) 
; 

UPDATE animals SET name = jsondata->>'animal_name' WHERE name = 'default_animal'; 
+0

'''9點37分12秒內核錯誤:錯誤:運營商不存在:文本 - >>未知 ''' –

+0

您正在使用哪個版本的Postgres的? @ Teletubbi-OSX我用postgres 9.4.4測試了它。你有'JSONB'列類型嗎? –

+0

data_type ='''text''' OS X psql(9.4.4,server 9.3.4) –

0

假設柱JSON包含動物中的恰好一個實例的以下辦法應該工作:

更新動物集名稱=子(JSON位置(JSON 「animal_name」)+ 15 CHAR_LENGTH(JSON) - 2)