PostgreSQL/Constraints/Create Rule

Материал из SQL эксперт
Перейти к: навигация, поиск

CREATE OR REPLACE RULE

postgres=#
postgres=# CREATE TABLE measurement (
postgres(#    city_id         int not null,
postgres(#    logdate         date not null,
postgres(#    peaktemp        int,
postgres(#    unitsales       int
postgres(# );
CREATE TABLE
postgres=#
postgres=# CREATE TABLE measurement_yy04mm02 (
postgres(#     CHECK ( logdate >= DATE "2004-02-01" AND logdate < DATE "2004-03-01" )
postgres(# ) INHERITS (measurement);
CREATE TABLE
postgres=#
postgres=# CREATE TABLE measurement_yy04mm03 (
postgres(#     CHECK ( logdate >= DATE "2004-03-01" AND logdate < DATE "2004-04-01" )
postgres(# ) INHERITS (measurement);
CREATE TABLE
postgres=#
postgres=# CREATE OR REPLACE RULE measurement_current_partition AS
postgres-# ON INSERT TO measurement
postgres-# DO INSTEAD
postgres-#    INSERT INTO measurement_yy06mm01 VALUES ( NEW.city_id,
postgres(#                                              NEW.logdate,
postgres(#                                              NEW.peaktemp,
postgres(#                                              NEW.unitsales );
ERROR:  relation "measurement_yy06mm01" does not exist
postgres=#
postgres=# CREATE RULE measurement_insert_yy04mm02 AS
postgres-# ON INSERT TO measurement WHERE
postgres-#     ( logdate >= DATE "2004-02-01" AND logdate < DATE "2004-03-01" )
postgres-# DO INSTEAD
postgres-#     INSERT INTO measurement_yy04mm02 VALUES ( NEW.city_id,
postgres(#                                               NEW.logdate,
postgres(#                                               NEW.peaktemp,
postgres(#                                               NEW.unitsales );
CREATE RULE
postgres=#
postgres=# CREATE VIEW allmeasurement AS
postgres-# SELECT * FROM measurement_yy04mm02
postgres-# UNION ALL
postgres-# SELECT * FROM measurement_yy04mm03;
CREATE VIEW
postgres=#
postgres=# drop view allmeasurement cascade;
DROP VIEW
postgres=# drop table measurement_yy04mm02 cascade;
NOTICE:  drop cascades to rule measurement_insert_yy04mm02 on table measurement
DROP TABLE
postgres=# drop table measurement_yy04mm03 cascade;
DROP TABLE
postgres=# drop table measurement cascade;
DROP TABLE
postgres=#
postgres=#