ALTER TABLE tickets_directions ADD COLUMN last_ticket_time timestamp; ALTER TABLE tickets_directions ADD COLUMN tickets_num integer DEFAULT 0; Поскольку PostgreSQL не требует обязательного создания первичного ключа, то не
будем создавать его. Это не помешает нам однозначно идентифицировать строки в
таблице tickets_directions.
Поскольку в команде UPDATE нет предложения WHERE, в котором было бы условие,
ограничивающее множество обновляемых строк, то будут обновлены все строки таб-
лицы — во все будет записано значение 0 в столбец tickets_num.
Для того чтобы не усложнять изложение материала, создадим временную таблицу,
являющуюся аналогом таблицы «Перелеты» (ticket_flights), однако без внешних клю-
чей. Поэтому мы сможем добавлять в нее строки, не заботясь о добавлении строк
в таблицы «Билеты» (tickets) и «Бронирования» (bookings). Тем не менее, первич-
ный ключ все же создадим, чтобы продемонстрировать, что в случае попытки ввода
строк с дубликатными значениями первичного ключа значения счетчиков в таблице
tickets_directions наращиваться не будут.
CREATE TEMP TABLE ticket_flights_tmp AS SELECT * FROM ticket_flights WITH NO DATA; ALTER TABLE ticket_flights_tmp ADD PRIMARY KEY ( ticket_no, flight_id ); Теперь представим команду, которая и будет добавлять новую запись о про-
даже билета и увеличивать значение счетчика проданных билетов в таблице
tickets_directions.
WITH sell_ticket AS ( INSERT INTO ticket_flights_tmp ( ticket_no, flight_id, fare_conditions, amount ) VALUES ( '1234567890123', 30829, 'Economy', 12800 ) RETURNING * ) UPDATE tickets_directions td SET last_ticket_time = CURRENT_TIMESTAMP, tickets_num = tickets_num + 1 WHERE ( td.departure_city, td.arrival_city ) =