Добавление данных командами 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