Главная страница
Навигация по странице:

  • Полная модификация

  • Модификация среза

  • Модификация элемента

  • лекция. Коды ошибок Postgresql


    Скачать 223.85 Kb.
    НазваниеКоды ошибок Postgresql
    Анкорлекция
    Дата09.01.2023
    Размер223.85 Kb.
    Формат файлаdocx
    Имя файлаLektsia_Prilozhenia_PostgreSQL.docx
    ТипДокументы
    #878367
    страница25 из 30
    1   ...   22   23   24   25   26   27   28   29   30

    Массивы.


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

    Создание полей со значениями-массивами.


    Чтобы создать простейшее поле-массив, включите в команду CREATE TABLE или ALTER TABLE пару квадратных скобок после имени поля. Квадратные скобки показывают, что вместо одного значения в поле может храниться массив указанного типа. Например, команда для создания поля single_array типа type выглядит так:

    single_array type[] --Одномерный массив

    Дополнительные квадратные скобки определя ют многомерные массивы, то есть "массивы массивов". Пример:

    mu1ti_array type[][] --Многомерный массив

    Теоретически в квадратных скобках можно указать целое число, чтобы созданный массив имел фиксированный размер (то есть всегда состоял из п элементов по указанному измерению и не более). Тем не менее в PostgreSQL 7.1.x это ограничение не соблюдалось, и на практике массив фиксированной длины ничем не отличался от обычного массива.

    Вставка значений в поля-массивы.


    В PostgreSQL предусмотрен специальный синтаксис вставки нескольких значений в одно поле. Этот синтаксис основан на определении массивов-констант. Как упоминалось в главе 3, массив-константа (предназначенный для ссылки на массивы PostgreSQL в командах SQL) состоит из фигурных скобок, апострофов и запятых, заключенных в апострофы. Кавычки нужны только при работе с массивами строк. Таким образом, обобщенная форма массива-константы выглядит так:

    '{ "текст" [….] }' --массив строк

    '{ число [….]}' --числовой массив

    В этих примерах использованы строковые и числовые массивы, но поле может определяться как массив произвольного типа (включая типы boolean, date и time). Как правило, если для описания величины в скалярном контексте должны использоваться апострофы (например, в строковых константах или данных типа timestamp), в контексте массива эта величина заключается в кавычки.

    Выборка из полей-массивов.


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

    Индексы элементов


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

    В отличие от таких языков программирования, как С, в PostgreSQL индексация в массивах начинается с 1, а не с 0.

    Обратите внимание: данные, возвращаемые запросом, не заключаются в кавычки или фигурные скобки. Это связано с тем, что отдельное текстовое значение должно возвращаться в виде одной текстовой константы, а не массива.

    Срезы

    В PostgreSQL также поддерживается возможность создания срезов при выборке из массива. Срез аналогичен обычному обращению к элементам по индексу, но он описывает интервал значений. Срез задается парой целочисленных индексов, разделенных двоеточием и заключенных в квадратные скобки. Например, конструкция [2:5] описывает второй, третий, четвертый и пятый элемент заданного массива. Результат среза возвращается в виде константы-массива, которая фактически описывает подмножество элементов исходного массива (впрочем, срез может содержать все элементы исходного массива).

    В PostgreSQL 7.1.x использование срезов в многомерных массивах иногда приводит к непредсказуемым последствиям. По этой причине, пока не будут внесены исправления, при работе с многомерными массивами рекомендуется обращаться к элементам по конкретным значениям индексов.

    Определение количества элементов.


    Чтобы узнать количество значении, хранящихся в массиве, следует воспользоваться функцией array_dims(). В качестве параметра функции передается идентификатор – имя поля-массива, для которого вызывается функция. Результат возвращается в виде строки, содержащей описание массива в синтаксисе среза.

    Обновление данных в полях-массивах


    Существует три варианта модификации данных в полях-массивах.

    • Полная модификация. Все содержимое массива заменяется новыми данными, заданными в виде массива-константы.

    • Модификация среза. Срез (то есть интервальное подмножество элементов) заменяется новыми данными, заданными в виде массива-константы. Количество элементов в константе должно соответствовать количеству элементов в обновляемом срезе.

    • Модификация элемента. Отдельный элемент массива заменяется новой константой, относящейся к базовому типу данных массива. Элемент задается индексом. В первом случае количество элементов в новом массиве может не совпадать с количеством элементов в существующем массиве. Допустим, работник с кодом id=102 хочет добавить данные о новой книге в список, хранящийся в таблице favorite_books. 



    1   ...   22   23   24   25   26   27   28   29   30


    написать администратору сайта