2016-03-18 5 views
0

У меня есть таблица, содержащая поле типа JSON. Я хочу, чтобы выбрать, где значение существует в этом поле JSON:PSQL select key из первых элементов поля JSON

dev=> select id, command from statemachine_history; 

id |          command           
------+-------------------------------------------------------------------------------------- 
    1 | {"Common\\Accounting\\StateMachine\\Command\\CreateDebitorCommand":true} 
    2 | [] 
    3 | {"Common\\Message\\StateMachine\\MessageSendOutCommand":true} 
    4 | [] 
    5 | {"Common\\Message\\StateMachine\\MessageSendOutCommand":false} 
    6 | {"Common\\Message\\StateMachine\\MessageCheckRetryCommand":true} 
    7 | {"Common\\Newsletter\\Command\\IssueConfirmationRequest":true} 
    8 | {"Common\\Customer\\Command\\CustomerActivateCommand":true} 
    9 | {"Common\\Customer\\Command\\CustomerRegisterCommand":true} 
    10 | {"Common\\Accounting\\StateMachine\\Command\\CreateDebitorCommand":true} 
    11 | [] 
    12 | {"Common\\Message\\StateMachine\\MessageSendOutCommand":true} 
    13 | {"Common\\Accounting\\StateMachine\\Command\\CreateDebitorCommand":true} 
1033 | [] 
    14 | [] 
    15 | {"Common\\Message\\StateMachine\\MessageSendOutCommand":true} 
    16 | {"Common\\Customer\\Command\\CustomerActivateCommand":true} 
    17 | {"Common\\Customer\\Command\\CustomerRegisterCommand":true} 
    18 | [] 
    19 | {"Common\\Message\\StateMachine\\MessageSendOutCommand":false} 
    20 | {"Common\\Message\\StateMachine\\MessageCheckRetryCommand":true} 
    21 | {"INTPASS\\Appointment\\StateMachine\\Command\\FinalizeBookingsCommand":true} 
    22 | {"INTPASS\\Appointment\\StateMachine\\Command\\FinalizeBookingsCommand":true} 

Я хочу знать, как получить доступ к ключу этого массива. В частности, я хочу выбрать из этой таблицы, где какое-то значение существует в поле команды.

Я попытался следующие, но это не работает:

SELECT * FROM statemachine_history WHERE command->'key' = 'Common\\Message\\StateMachine\\MessageSendOutCommand' 

ответ

0

я могу изменить тип данных JSON поле в строку, то можете использовать LIKE ключевое слово %% Пример:

SELECT identifier FROM statemachine_history WHERE schema_name='Subscription' AND command::varchar LIKE '%ChangeMembershipPlanCommand%'