Show
Ignore:
Timestamp:
05/09/08 12:31:09 (2 months ago)
Author:
dbs
Message:

Make all foreign keys deferrable, so we can DELETE and INSERT inside a transaction without constraints hobbling us

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Open-ILS/src/sql/Pg/005.schema.actors.sql

    r9243 r9542  
    3333        email                   TEXT, 
    3434        passwd                  TEXT                            NOT NULL, 
    35         standing                INT                             NOT NULL DEFAULT 1 REFERENCES config.standing (id), 
    36         ident_type              INT                             NOT NULL REFERENCES config.identification_type (id), 
     35        standing                INT                             NOT NULL DEFAULT 1 REFERENCES config.standing (id) DEFERRABLE INITIALLY DEFERRED, 
     36        ident_type              INT                             NOT NULL REFERENCES config.identification_type (id) DEFERRABLE INITIALLY DEFERRED, 
    3737        ident_value             TEXT, 
    38         ident_type2             INT                             REFERENCES config.identification_type (id), 
     38        ident_type2             INT                             REFERENCES config.identification_type (id) DEFERRABLE INITIALLY DEFERRED, 
    3939        ident_value2            TEXT, 
    40         net_access_level        INT                             NOT NULL DEFAULT 1 REFERENCES config.net_access_level (id), 
     40        net_access_level        INT                             NOT NULL DEFAULT 1 REFERENCES config.net_access_level (id) DEFERRABLE INITIALLY DEFERRED, 
    4141        photo_url               TEXT, 
    4242        prefix                  TEXT, 
     
    135135CREATE TABLE actor.usr_note ( 
    136136        id              BIGSERIAL                       PRIMARY KEY, 
    137         usr             BIGINT                          NOT NULL REFERENCES actor.usr ON DELETE CASCADE, 
    138         creator         BIGINT                          NOT NULL REFERENCES actor.usr ON DELETE CASCADE, 
     137        usr             BIGINT                          NOT NULL REFERENCES actor.usr ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
     138        creator         BIGINT                          NOT NULL REFERENCES actor.usr ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    139139        create_date     TIMESTAMP WITH TIME ZONE        DEFAULT NOW(), 
    140140        pub             BOOL                            NOT NULL DEFAULT FALSE, 
     
    146146CREATE TABLE actor.usr_standing_penalty ( 
    147147        id              SERIAL  PRIMARY KEY, 
    148         usr             INT     NOT NULL REFERENCES actor.usr ON DELETE CASCADE, 
     148        usr             INT     NOT NULL REFERENCES actor.usr ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    149149        penalty_type    TEXT    NOT NULL 
    150150); 
     
    174174CREATE TABLE actor.usr_setting ( 
    175175        id      BIGSERIAL       PRIMARY KEY, 
    176         usr     INT             NOT NULL REFERENCES actor.usr ON DELETE CASCADE, 
     176        usr     INT             NOT NULL REFERENCES actor.usr ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    177177        name    TEXT            NOT NULL, 
    178178        value   TEXT            NOT NULL, 
     
    307307CREATE TABLE actor.card ( 
    308308        id      SERIAL  PRIMARY KEY, 
    309         usr     INT     NOT NULL REFERENCES actor.usr (id), 
     309        usr     INT     NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED, 
    310310        barcode TEXT    NOT NULL UNIQUE, 
    311311        active  BOOL    NOT NULL DEFAULT TRUE 
     
    345345        opac_label      TEXT    NOT NULL, 
    346346        depth           INT     NOT NULL, 
    347         parent          INT     REFERENCES actor.org_unit_type (id), 
     347        parent          INT     REFERENCES actor.org_unit_type (id) DEFERRABLE INITIALLY DEFERRED, 
    348348        can_have_vols   BOOL    NOT NULL DEFAULT TRUE, 
    349349        can_have_users  BOOL    NOT NULL DEFAULT TRUE 
     
    353353CREATE TABLE actor.org_unit ( 
    354354        id              SERIAL  PRIMARY KEY, 
    355         parent_ou       INT     REFERENCES actor.org_unit (id), 
    356         ou_type         INT     NOT NULL REFERENCES actor.org_unit_type (id), 
     355        parent_ou       INT     REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED, 
     356        ou_type         INT     NOT NULL REFERENCES actor.org_unit_type (id) DEFERRABLE INITIALLY DEFERRED, 
    357357        ill_address     INT, 
    358358        holds_address   INT, 
     
    379379CREATE TABLE actor.org_lasso_map ( 
    380380    id          SERIAL  PRIMARY KEY, 
    381     lasso       INT     NOT NULL REFERENCES actor.org_lasso (id) ON DELETE CASCADE, 
    382     org_unit    INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE 
     381    lasso       INT     NOT NULL REFERENCES actor.org_lasso (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
     382    org_unit    INT     NOT NULL REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED 
    383383); 
    384384CREATE UNIQUE INDEX ou_lasso_lasso_ou_idx ON actor.org_lasso_map (lasso, org_unit); 
     
    394394 
    395395CREATE TABLE actor.hours_of_operation ( 
    396         id              INT     PRIMARY KEY REFERENCES actor.org_unit (id) ON DELETE CASCADE, 
     396        id              INT     PRIMARY KEY REFERENCES actor.org_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    397397        dow_0_open      TIME    NOT NULL DEFAULT '09:00', 
    398398        dow_0_close     TIME    NOT NULL DEFAULT '17:00', 
     
    413413CREATE TABLE actor.org_unit_closed ( 
    414414        id              SERIAL                          PRIMARY KEY, 
    415         org_unit        INT                             NOT NULL REFERENCES actor.org_unit (id), 
     415        org_unit        INT                             NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED, 
    416416        close_start     TIMESTAMP WITH TIME ZONE        NOT NULL, 
    417417        close_end       TIMESTAMP WITH TIME ZONE        NOT NULL, 
     
    423423        id              SERIAL  PRIMARY KEY, 
    424424        name            TEXT    NOT NULL UNIQUE, 
    425         owning_lib      INT     NOT NULL REFERENCES actor.org_unit (id) 
     425        owning_lib      INT     NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED 
    426426); 
    427427 
    428428CREATE TABLE actor.usr_org_unit_opt_in ( 
    429429        id              SERIAL                          PRIMARY KEY, 
    430         org_unit        INT                             NOT NULL REFERENCES actor.org_unit (id), 
    431         usr             INT                             NOT NULL REFERENCES actor.usr (id), 
    432         staff           INT                             NOT NULL REFERENCES actor.usr (id), 
     430        org_unit        INT                             NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED, 
     431        usr             INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED, 
     432        staff           INT                             NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED, 
    433433        opt_in_ts       TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT NOW(), 
    434         opt_in_ws       INT                             NOT NULL REFERENCES actor.workstation (id), 
     434        opt_in_ws       INT                             NOT NULL REFERENCES actor.workstation (id) DEFERRABLE INITIALLY DEFERRED, 
    435435        CONSTRAINT usr_opt_in_once_per_org_unit UNIQUE (usr,org_unit) 
    436436); 
     
    438438CREATE TABLE actor.org_unit_setting ( 
    439439        id              BIGSERIAL       PRIMARY KEY, 
    440         org_unit        INT             NOT NULL REFERENCES actor.org_unit ON DELETE CASCADE, 
     440        org_unit        INT             NOT NULL REFERENCES actor.org_unit ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    441441        name            TEXT            NOT NULL, 
    442442        value           TEXT            NOT NULL, 
     
    475475        within_city_limits      BOOL    NOT NULL DEFAULT TRUE, 
    476476        address_type            TEXT    NOT NULL DEFAULT 'MAILING', 
    477         usr                     INT     NOT NULL REFERENCES actor.usr (id), 
     477        usr                     INT     NOT NULL REFERENCES actor.usr (id) DEFERRABLE INITIALLY DEFERRED, 
    478478        street1                 TEXT    NOT NULL, 
    479479        street2                 TEXT, 
     
    499499        valid           BOOL    NOT NULL DEFAULT TRUE, 
    500500        address_type    TEXT    NOT NULL DEFAULT 'MAILING', 
    501         org_unit        INT     NOT NULL REFERENCES actor.org_unit (id), 
     501        org_unit        INT     NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED, 
    502502        street1         TEXT    NOT NULL, 
    503503        street2         TEXT,