Как создать индекс для целочисленного свойства json в postgres

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

Я пробовал это так (а также десятки других)

CREATE INDEX user_reputation_idx ON users(("user"->>'reputation')::int)

Он отлично работает в запросе (например, ORDER BY ("user"->>'reputation')::int)

Что мне не хватает?

UPDATE

Я получаю простую синтаксическую ошибку, однако, я действительно не знаю, почему.

ERROR:  syntax error at or near "::"
LINE 1: ... user_reputation_idx ON users (("user"->>'reputation')::int)

Определение таблицы довольно просто. Это всего лишь один столбец user типа json .

Итак, выглядит так:

CREATE TABLE users
(
  "user" json
)
6 голосов | спросил Christoph 5 ThuEurope/Moscow2013-12-05T23:34:23+04:00Europe/Moscow12bEurope/MoscowThu, 05 Dec 2013 23:34:23 +0400 2013, 23:34:23

1 ответ


12

Попробуйте это вместо:

CREATE INDEX user_reputation_idx ON users(cast("user"->>'reputation' AS int));

Shorts синтаксис Postgres ---- +: = 1 =: + ---- для трансляций не допускается без дополнительных круглых скобок в определении индекса ( см. комментарий @ bma ). Он работает со стандартной функцией SQL: :: Это не относится к cast(expression AS type).

В любом случае вы можете использовать ярлык синтаксиса json в выражениях, которые используют индекс.

ответил Erwin Brandstetter 6 FriEurope/Moscow2013-12-06T03:53:35+04:00Europe/Moscow12bEurope/MoscowFri, 06 Dec 2013 03:53:35 +0400 2013, 03:53:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132