Зачем использовать тип столбца Postgres JSON? - PullRequest
0 голосов
/ 03 июля 2018

Тип столбца JSON принимает недопустимый JSON

например, [1,2,3] может быть вставлено без закрытия {}

Есть ли разница между JSON и строкой?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Приведенные выше данные могут храниться в текстовом виде, но типы данных JSON имеют то преимущество, что вы можете применять правила JSON в этих столбцах. Существует несколько функций, указанных в JSON, которые нельзя использовать для текстовых полей.

Обратитесь по этой ссылке, чтобы понять о функциях / процедурах json

0 голосов
/ 03 июля 2018

Хотя [1,2,3] действительно JSON , как указано в комментариях zerkms , для ответа на основной вопрос: Есть ли разница между JSON и строкой?

Ответ - да. Весь новый набор операций, функций и т. Д. Применяется к столбцам json или jsonb, которые не применяются к столбцам text (или связанным типам).

Например, в то время как для столбцов text вам потребуется использовать регулярные выражения и связанные строковые функции для анализа строки (или пользовательской функции), для json или jsonb существует отдельный набор запросов. операторы, которые работают в структурированной природе JSON .

Из Postgres doc , с учетом следующего JSON :

{
    "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
    "name": "Angela Barton",
    "is_active": true,
    "company": "Magnafone",
    "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"
    ]
}

Док тогда говорит:

Мы храним эти документы в таблице с именем api, в столбце jsonb с именем JDoc. Если для этого столбца создается индекс GIN, запросы, такие как следующие могут использовать индекс:

-- Find documents in which the key "company" has value "Magnafone"
SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @> '{"company": "Magnafone"}';

Это позволяет запрашивать поля jsonb (или json) совсем иначе, чем если бы это было просто text или связанное поле.

Вот некоторые Postgres doc , которые предоставляют некоторые из этих операторов и функций запросов.

В основном, если у вас есть JSON данные, которые вы хотите обработать как JSON данные, тогда столбец лучше всего указать как json или jsonb (какой вы выберете зависит от того, хотите ли вы сохранить его как обычный текст или двоичный файл, соответственно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...