INSERT
СинÑакÑиÑ
[ WITH [ RECURSIVE ] запÑоÑ_WITH [, ...] ]
INSERT INTO table_name [ ( имÑ_колонки [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { вÑÑажение | DEFAULT } [, ...] ) [, ...] | запÑÐ¾Ñ }
[ RETURNING * | вÑÑажение_ÑезÑлÑÑаÑа [ [ AS ] имÑ_ÑезÑлÑÑаÑа ] [, ...] ]ÐпиÑание
INSERT добавлÑÐµÑ ÑÑÑоки в ÑаблиÑÑ. ÐÑа команда Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко ÑÑÑок, ÑÑоÑмиÑованнÑÑ Ð²ÑÑажениÑми знаÑений, либо Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более ÑÑÑок, вÑданнÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑм запÑоÑом.
Ðмена ÑелевÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº могÑÑ Ð¿ÐµÑеÑиÑлÑÑÑÑÑ Ð² лÑбом поÑÑдке. ÐÑли ÑпиÑок Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ колонок оÑÑÑÑÑÑвÑеÑ, по ÑмолÑÐ°Ð½Ð¸Ñ ÑелевÑми колонками ÑÑановÑÑÑÑ Ð²Ñе колонки заданной ÑаблиÑÑ; либо пеÑвÑе N из Ð½Ð¸Ñ , еÑли ÑолÑко N колонок поÑÑÑÐ¿Ð°ÐµÑ Ð¾Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VALUES или запÑоÑа. ÐнаÑениÑ, полÑÑаемÑе Ð¾Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VALUES или запÑоÑа, ÑвÑзÑваÑÑÑÑ Ñ Ñвно или неÑвно опÑеделÑннÑм ÑпиÑком колонок Ñлева напÑаво.
ÐÑе колонки, не пÑедÑÑавленнÑе в Ñвном или неÑвном ÑпиÑке колонок, полÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, еÑли Ð´Ð»Ñ Ð½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ñ ÑÑи знаÑениÑ, либо NULL в пÑоÑивном ÑлÑÑае.
ÐÑли вÑÑажение Ð´Ð»Ñ Ð»Ñбой колонки вÑдаÑÑ Ð´ÑÑгой Ñип даннÑÑ , ÑиÑÑема попÑÑаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑивеÑÑи его к нÑжномÑ.
С необÑзаÑелÑнÑм пÑедложением RETURNING команда INSERT вÑÑиÑÐ»Ð¸Ñ Ð¸ возвÑаÑÐ¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑакÑиÑеÑки добавленной ÑÑÑоки. РоÑновном ÑÑо полезно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений, пÑиÑвоеннÑÑ Ð¿Ð¾ ÑмолÑаниÑ, напÑимеÑ, поÑледоваÑелÑного номеÑа запиÑи. Ðднако в ÑÑом пÑедложении можно задаÑÑ Ð»Ñбое вÑÑажение Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ð¼Ð¸ ÑаблиÑÑ. СпиÑок RETURNING Ð¸Ð¼ÐµÐµÑ ÑÐ¾Ñ Ð¶Ðµ ÑинÑакÑиÑ, ÑÑо и ÑпиÑок ÑезÑлÑÑаÑов SELECT.
ЧÑÐ¾Ð±Ñ Ð²ÑÑавиÑÑ ÑÑÑоки в ÑаблиÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ имеÑÑ Ð¿Ñаво INSERT Ð´Ð»Ñ ÑÑой ÑаблиÑÑ. ÐÑли ÑказÑваеÑÑÑ ÑпиÑок колонок, доÑÑаÑоÑно имеÑÑ Ð¿Ñаво INSERT Ð´Ð»Ñ Ð¿ÐµÑеÑиÑленнÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº. ÐÐ»Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ RETURNING ÑÑебÑеÑÑÑ Ð¿Ñаво SELECT Ð´Ð»Ñ Ð²ÑÐµÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, пеÑеÑиÑленнÑÑ Ð² RETURNING. ÐÑли Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑок пÑименÑеÑÑÑ Ð·Ð°Ð¿ÑоÑ, Ð´Ð»Ñ Ð²ÑÐµÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð»Ð¸ колонок, задейÑÑвованнÑÑ Ð² ÑÑом запÑоÑе, ÑазÑмееÑÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ имеÑÑ Ð¿Ñаво SELECT.
ÐаÑамеÑÑÑ
- запÑоÑ_WITH
ÐÑедложение WITH позволÑÐµÑ Ð·Ð°Ð´Ð°ÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко подзапÑоÑов, на коÑоÑÑе заÑем можно ÑÑÑлаÑÑÑÑ Ð¿Ð¾ имени в запÑоÑе INSERT. ÐодÑобнее об ÑÑом Ñм. Раздел 7.8 и SELECT.
ÐаданнÑй запÑÐ¾Ñ (опеÑаÑÐ¾Ñ SELECT) Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¿Ñедложение WITH. Ð ÑÑом ÑлÑÑае в запÑоÑе можно обÑаÑаÑÑÑÑ Ðº обоим запÑоÑам_WITH, но вÑоÑой бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑиоÑиÑеÑ, Ñак как он вложен ближе.
- table_name
ÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) ÑÑÑеÑÑвÑÑÑей ÑаблиÑÑ.
- имÑ_колонки
ÐÐ¼Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ в ÑаблиÑе имÑ_ÑаблиÑÑ. ÐÐ¼Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¾ именем вложенного Ð¿Ð¾Ð»Ñ Ð¸Ð»Ð¸ индекÑом маÑÑива, еÑли ÑÑебÑеÑÑÑ. (ÐÑи заполнении ÑолÑко некоÑоÑÑÑ Ð¿Ð¾Ð»ÐµÐ¹ ÑоÑÑавной колонки оÑÑалÑнÑе Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NULL.)
- DEFAULT VALUES
ÐÑе колонки полÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
- вÑÑажение
ÐÑÑажение или знаÑение, коÑоÑое бÑÐ´ÐµÑ Ð¿ÑиÑвоено ÑооÑвеÑÑÑвÑÑÑей колонке.
- DEFAULT
СооÑвеÑÑÑвÑÑÑÐ°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ° полÑÑÐ¸Ñ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ.
- запÑоÑ
ÐапÑÐ¾Ñ (опеÑаÑÐ¾Ñ SELECT), коÑоÑÑй вÑдаÑÑ ÑÑÑоки Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑаблиÑÑ. Ðго ÑинÑакÑÐ¸Ñ Ð¾Ð¿Ð¸Ñан в ÑпÑавке опеÑаÑоÑа SELECT.
- вÑÑажение_ÑезÑлÑÑаÑа
ÐÑÑажение, коÑоÑое бÑÐ´ÐµÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð¸ возвÑаÑаÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ INSERT поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки. Ð ÑÑом вÑÑажении можно иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð° лÑбÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº ÑаблиÑÑ Ð¸Ð¼Ñ_ÑаблиÑÑ. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²Ñе колонки, доÑÑаÑоÑно напиÑаÑÑ *.
- имÑ_ÑезÑлÑÑаÑа
ÐмÑ, назнаÑаемое возвÑаÑаемой колонке.
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
Ð ÑлÑÑае ÑÑпеÑного завеÑÑениÑ, INSERT возвÑаÑÐ°ÐµÑ Ð¼ÐµÑÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² виде
INSERT oid ÑиÑло
ÐдеÑÑ ÑиÑло пÑедÑÑавлÑÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво добавленнÑÑ ÑÑÑок. ÐÑли ÑиÑло ÑавнÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ, а ÑÐµÐ»ÐµÐ²Ð°Ñ ÑаблиÑа ÑодеÑÐ¶Ð¸Ñ oid, Ñо вмеÑÑо oid вÑводиÑÑÑ OID, назнаÑеннÑй добавленной ÑÑÑоке. РпÑоÑивном ÑлÑÑае вмеÑÑо oid вÑводиÑÑÑ Ð½Ð¾Ð»Ñ.
ÐÑли команда INSERT ÑодеÑÐ¶Ð¸Ñ Ð¿Ñедложение RETURNING, ÐµÑ ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ñ Ð¾Ð¶ на ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа SELECT (Ñ Ñеми же колонками и знаÑениÑми, ÑÑо ÑодеÑжаÑÑÑ Ð² ÑпиÑке RETURNING), полÑÑеннÑй Ð´Ð»Ñ ÑÑÑок, добавленнÑÑ ÑÑой командой.
ÐÑимеÑÑ
Ðобавление одной ÑÑÑоки в ÑаблиÑÑ films:
INSERT INTO films VALUES
('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');Ð ÑÑом пÑимеÑе колонка len опÑÑкаеÑÑÑ Ð¸, Ñаким обÑазом, полÑÑÐ°ÐµÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ:
INSERT INTO films (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');Ð ÑÑом пÑимеÑе Ð´Ð»Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ Ñ Ð´Ð°Ñой задаÑÑÑÑ Ñказание DEFAULT, а не Ñвное знаÑение:
INSERT INTO films VALUES
('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes');
INSERT INTO films (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');Ðобавление ÑÑÑоки, полноÑÑÑÑ ÑоÑÑоÑÑей из знаÑений по ÑмолÑаниÑ:
INSERT INTO films DEFAULT VALUES;
Ðобавление неÑколÑÐºÐ¸Ñ ÑÑÑок Ñ Ð¸ÑполÑзованием многоÑÑÑоÑного ÑинÑакÑиÑа VALUES:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');Ð ÑÑом пÑимеÑе в ÑаблиÑÑ films вÑÑавлÑÑÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑÑоки из ÑаблиÑÑ tmp_films, имеÑÑей ÑÑ Ð¶Ðµ ÑÑÑÑкÑÑÑÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, ÑÑо и films:
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑиÑÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ даннÑÑ Ð² колонки Ñ Ñипом маÑÑива:
-- Создание пÑÑÑого Ð¿Ð¾Ð»Ñ 3x3 Ð´Ð»Ñ Ð¸Ð³ÑÑ Ð² кÑеÑÑики-нолики
INSERT INTO tictactoe (game, board[1:3][1:3])
VALUES (1, '{{" "," "," "},{" "," "," "},{" "," "," "}}');
-- Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑов в пÑедÑдÑÑей команда могÑÑ Ð±ÑÑÑ Ð¾Ð¿ÑÑенÑ
INSERT INTO tictactoe (game, board)
VALUES (2, '{{X," "," "},{" ",O," "},{" ",X," "}}');Ðобавление одной ÑÑÑоки в ÑаблиÑÑ distributors и полÑÑение поÑледоваÑелÑного номеÑа, ÑгенеÑиÑованного благодаÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ DEFAULT:
INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did;
УвелиÑение ÑÑÑÑÑика пÑодаж Ð´Ð»Ñ Ð¿ÑодавÑа, занимаÑÑегоÑÑ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸ÐµÐ¹ Acme Corporation, и ÑÐ¾Ñ Ñанение вÑей изменÑнной ÑÑÑоки вмеÑÑе Ñ ÑекÑÑим вÑеменем в ÑаблиÑе жÑÑнала:
WITH upd AS (
UPDATE employees SET sales_count = sales_count + 1 WHERE id =
(SELECT sales_person FROM accounts WHERE name = 'Acme Corporation')
RETURNING *
)
INSERT INTO employees_log SELECT *, current_timestamp FROM upd;СовмеÑÑимоÑÑÑ
INSERT ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL, но пÑедложение RETURNING оÑноÑиÑÑÑ Ðº ÑаÑÑиÑениÑм PostgreSQL, как и возможноÑÑÑ Ð¿ÑименÑÑÑ WITH Ñ INSERT. ÐÑоме Ñого, ÑиÑÑаÑиÑ, когда ÑпиÑок колонок опÑÑен, но не вÑе колонки полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð· пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ VALUES или запÑоÑа, ÑÑандаÑÑом не допÑÑкаеÑÑÑ.
ÐозможнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÑпÑавке SELECT.