Иллюстрированный самоучитель по PostgreSQL

Добавление данных командами INSERT и COPY

После создания таблицы с заданной структурой наступает следующий этап – заполнение таблицы данными. В PostgreSQL имеются три общих способа заполнения таблиц данными:

  • вставка новых группированных данных командой INSERT INTO;
  • вставка существующих данных из другой таблицы командой INSERT INTO в сочетании с командой SELECT;
  • вставка данных из внешнего файла командой COPY (или \copy).

Вставка новых данных

Ниже приведен синтаксис команды INSERT INTO при вставке новых данных:

INSERT INTO таблица
[ (имя_поля [,…]) ] VALUES (значение [….])

Ниже перечислены параметры команды.

  • таблица. Имя таблицы, в которую вставляются данные командой SQL INSERT.
  • (имя_поля [….]). Необязательный группированный список полей новой записи, которым присваиваются значения.
  • VALUES. Ключевое слово SQL, за которым следует группированный список значений.
  • (значение [,… ]). Обязательный группированный список значений полей. Для каждого поля указывается ровно одно значение, элементы списка разделяются запятыми. Элемент списка может быть выражением (например, операцией с двумя операндами) или константой.

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

В листинге 4.16 приведен пример создания новой записи в таблице books базы данных booktown.

Листинг 4.16. Вставка новой записи в таблицу books.

booktown=# INSERT INTO books (Id, title, author_id, subject_id)
booktown-# VALUES (41472, 'Practical PostgreSQL', 1212, 4);
INSERT 3574037 1

Команда SQL, приведенная в листинге 4.16, вставляет новую запись с кодом (id) 41472, названием "Practical PostgreSQL", кодом автора 1212 и кодом темы 4. Обратите внимание на завершающее сообщение, начинающееся со слова INSERT, – оно указывает на то, что операция вставки была выполнена успешно. Первое число после INSERT является идентификатором объекта (OID) созданной записи, а второе число обозначает количество созданных записей (в нашем примере,– 1).

В приведенном примере необязательный список полей совпадает с порядком следования полей в структуре таблицы (слева направо). В данном случае этот список можно опустить, поскольку команда INSERT предполагает, что значения присваиваются в естественном порядке следования полей таблицы. Поля в списке можно переставить, но в этом случае порядок значений в секции VALUES тоже должен измениться, как показано в листинге 4.17.

Листинг 4.17. Изменение порядка перечисления полей.

booktown=# INSERT INTO books (subjected, author_id, id, title)
booktown-# VALUES (4, 7805, 41473, 'Programming Python');
INSERT 3574041 1
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.