Здравствуйте.
В PostgreSQL существует два способа получить значение ключа jsonb.
SELECT ('{"a": [1, 2, 3]}'::jsonb) -> 'a';
SELECT ('{"a": [1, 2, 3]}'::jsonb)['a'];
Но есть ли действительно существенная разница между этими способами? Может скорость, может какие-нибудь подводные камни, может ещё что-нибудь?
И являются ли они взаимозаменяемыми? Особенно вопрос интересует относительно индексов.
CREATE INDEX "my_table_index1" ON "my_table" USING gin (("my_column" -> 'a'));
CREATE INDEX "my_table_index2" ON "my_table" USING gin (("my_column"['b']));
А потом посмотреть что же у нас получилось, то мы увидим:
"my_table_index1" gin ((my_column -> 'a'::text))
"my_table_index2" gin ((my_column['b'::text]))
Выходит, что с точки зрения PostgreSQL это, таки, совершенно разные вещи?