Нello! Скажем, что vehicle
может быть типа "автомобиль", "грузовик" или "мотоцикл". Каждое транспортное средство имеет top_speed
(в км / ч) и license_plate
строку.
* 1006 Е.Г. *
CREATE TABLE vehicle (
type VARCHAR(20) NOT NULL,
top_speed INTEGER NOT NULL,
license_plate VARCHAR(10) NOT NULL
);
INSERT INTO vehicle (type, top_speed, license_plate)
VALUES
('car', 120, 'abc123'),
('truck', 110, 'def456'),
('motorcycle', 140, 'ghi789');
Теперь добавьте виды для каждого типа транспортного средства:
CREATE VIEW car AS (SELECT * FROM vehicle WHERE type='car');
CREATE VIEW truck AS (SELECT * FROM vehicle WHERE type='truck');
CREATE VIEW motorcycle AS (SELECT * FROM vehicle WHERE type='motorcycle');
Все это прекрасно и модно. Но я сталкиваюсь с неудобной ситуацией, когда пытаюсь вставить в эти представления:
INSERT INTO car (type, top_speed, license_plate)
VALUES
('car', 160, 'v4n1ty');
Моя проблема в том, что я уже вставляю в представление под названием "машина" ... почему я должен потрудиться указать, что type = 'car'
?
Если я опущу столбец type
в этом запросе на вставку, я получу ошибку, что столбец type
не может содержать NULL
. Похоже, что postgres не пропустит значения по умолчанию, даже если их можно почерпнуть из определения представления.
Есть ли способ заставить postgres просматривать определение представления, чтобы обеспечить значения по умолчанию для пропущенных столбцов в запросах INSERT
?