PostgreSQL Массив: функции, тип, пример

Что такое PostgreSQL Множество?

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

Каждый соответствующий PostgreSQL тип данных соответствует соответствующему типу массива. Например, целочисленный тип данных имеет тип массива целое[], символьный тип данных имеет тип массива символ[] и т. д.

Создающий PostgreSQL Массивы

В следующем примере мы создадим таблицу с именем «Сотрудники» со столбцом контактов, определенным как текстовый массив:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Команда должна выполниться успешно.

Создающий PostgreSQL Массивы

Вставка PostgreSQL Значения массива

Давайте сейчас вставить значения в приведенную выше таблицу:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Вставка должна пройти успешно.

Вставка PostgreSQL Значения массива

Значения третьего столбца, то есть контакта, вставлены в виде массива. Это было достигнуто с помощью конструктора ARRAY.

В этом примере мы заключили их в квадратные скобки []. У нас есть два контакта сотрудницы Элис Джон.

Мы по-прежнему можем использовать фигурные скобки {}, как показано ниже:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Команда должна выполниться успешно.

Вставка PostgreSQL Значения массива

Приведенные выше инструкции вставят две строки в таблицу «Сотрудники». При использовании фигурных скобок массив заключается в одинарные кавычки ('), а элементы текстового массива - в двойные кавычки (").

Запрос данных массива

Чтобы запросить элементы массива, мы используем оператор SELECT.

Чтобы просмотреть содержимое нашей таблицы «Сотрудники», мы запускаем следующую команду:

SELECT * FROM Employees;

Это возвращает следующее:

Запрос данных массива

Элементы столбца массива, то есть контакт, заключены в фигурные скобки {}.

Чтобы получить доступ к самим элементам массива, мы добавляем индекс в квадратных скобках []. Первый элемент массива находится в позиции 1.

Например, нам нужно получить имена сотрудников и только их первый контакт для тех сотрудников, у которых более одного контакта. Мы можем получить к этому доступ как контакт[1].

Давайте посмотрим на это:

SELECT name, contact[1]
FROM Employees;

Это вернет следующее:

Запрос данных массива

Мы можем использовать оператор SELECT вместе с предложением WHERE для фильтрации строк на основе столбца массива.

Например, чтобы увидеть сотрудника с номером (408)-567-78234 в качестве второго контакта, мы можем выполнить следующую команду:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

Это вернет следующее:

Запрос данных массива

Изменение PostgreSQL массив

Вы можете обновить весь или один элемент массива.

Вот содержимое таблицы «Сотрудники»:

Изменение PostgreSQL массив

Обновим второй номер телефона сотрудника Джеймса Буша, id которого равен 3:

Изменение PostgreSQL массив

Выполните следующую команду:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Команда должна выполниться успешно:

Изменение PostgreSQL массив

Давайте запросим таблицу, чтобы проверить, было ли изменение успешным:

Изменение PostgreSQL массив

Смена прошла успешно.

Поиск в PostgreSQL массив

На данный момент наша таблица «Сотрудники» выглядит следующим образом:

Поиск в PostgreSQL массив

Предположим, нам нужно знать, кому принадлежит контакт (408)-783-5731, независимо от позиции в массиве контактов. Мы можем использовать функцию ANY(), как показано ниже:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Это вернет следующее:

Поиск в PostgreSQL массив

Расширение массивов

Мы можем разбить значения массива на строки. Этот процесс известен как расширение массива.

В примере таблицы «Сотрудники» есть сотрудники с двумя контактами в массиве контактов. Мы можем разделить их на отдельные строки.

PostgreSQL предоставляет функцию unnest(), которую можно использовать для этого.

Например:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Это вернет следующее:

Расширение массивов

У сотрудников Элис Джон и Джеймса Буша есть два контакта. Мы можем разделить на отдельные строки.

Использование pgAdmin

Создающий PostgreSQL Массивы

Чтобы сделать то же самое через pgAdmin, сделайте следующее:

Шаг 1) Войдите в свою учетную запись pgAdmin.

Шаг 2)

  1. На панели навигации слева щелкните rbases.
  2. Нажмите кнопку «Демо»

Создающий PostgreSQL Массивы с использованием pgAdmin

Шаг 3) Введите запрос в редакторе запросов, чтобы создать таблицу «Сотрудники»:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

Шаг 4) Нажмите кнопку «Выполнить».

Создающий PostgreSQL Массивы с использованием pgAdmin

Вставка PostgreSQL Значения массива

Шаг 1) Введите следующий запрос в редакторе запросов:

INSERT INTO Employees 
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

Шаг 2) Нажмите кнопку «Выполнить»:

Вставка PostgreSQL Значения массива

Шаг 3)

Использование фигурных скобок в запросе

Шаг 1) Введите следующий запрос в редакторе запросов:

INSERT INTO Employees 
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   ( 
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

Шаг 2) Нажмите кнопку «Выполнить»:

Вставка PostgreSQL Значения массива

Запрос данных массива

Шаг 1) Чтобы просмотреть содержимое таблицы «Сотрудники», введите в редакторе запросов следующий запрос:

SELECT * FROM Employees;

Шаг 2) Нажмите кнопку «Выполнить»:

Запрос данных массива с помощью pgAdmin

Он должен вернуть следующее:

Запрос данных массива с помощью pgAdmin

Шаг 3) Чтобы увидеть первые контакты сотрудников:

  1. Введите следующий запрос в редакторе запросов:
    SELECT name, contact[1]
    FROM Employees;
    
  2. Нажмите кнопку «Выполнить».

Запрос данных массива с помощью pgAdmin

Он должен вернуть следующее:

Запрос данных массива с помощью pgAdmin

Шаг 4) Чтобы объединить оператор SELECT с предложением WHERE:

  1. Введите следующую команду в редакторе запросов:
    SELECT
       name
    FROM
       Employees
    WHERE
       contact [ 2 ] = '(408)-567-78234';
    
  2. Нажмите кнопку «Выполнить».

Запрос данных массива с помощью pgAdmin

Он должен вернуть следующее:

Запрос данных массива с помощью pgAdmin

Изменение PostgreSQL массив

Шаг 1) Чтобы обновить второй контакт пользователя с идентификатором 3, выполните следующую команду:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

Шаг 2) Нажмите кнопку «Выполнить».

Изменение PostgreSQL Массив с использованием pgAdmin

Шаг 3)

1. Введите следующую команду в редакторе запросов, чтобы проверить, было ли изменение успешным:

SELECT * FROM Employees;

2.Нажмите кнопку «Выполнить».

Изменение PostgreSQL Массив с использованием pgAdmin

Он должен вернуть следующее:

Изменение PostgreSQL Массив с использованием pgAdmin

Поиск в PostgreSQL массив

Шаг 1) Введите следующий запрос в редакторе запросов:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

Шаг 2) Нажмите кнопку «Выполнить».

Поиск в PostgreSQL Массив с использованием pgAdmin

Он должен вернуть следующее:

Поиск в PostgreSQL Массив с использованием pgAdmin

Расширение массивов

Шаг 1) Введите следующий запрос в редакторе запросов:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

Шаг 2) Нажмите кнопку «Выполнить».

Расширение массивов с помощью pgAdmin

Он должен вернуть следующее:

Расширение массивов с помощью pgAdmin

Резюме

  • PostgreSQL позволяет нам определить столбец таблицы как тип массива.
  • Массив должен быть допустимым тип данных такие как целочисленные, символьные или определяемые пользователем типы.
  • Чтобы вставить значения в столбец массива, мы используем конструктор ARRAY.
  • Если в одной строке столбца массива находится более одного элемента, первый элемент находится в позиции 1.
  • Доступ к каждому значению можно получить, передав индекс в квадратных скобках [].
  • Элементы массива можно получить с помощью оператора SELECT.
  • Значения столбца массива могут быть заключены в квадратные скобки [] или фигурные скобки {}.
  • Мы можем искать значения столбцов массива, используя функцию ANY().

Загрузите базу данных, используемую в этом руководстве.