Thread

Commits

  1. Fix VALIDATE CONSTRAINT to consider NO INHERIT attribute.

  1. BUG #14629: ALTER TABLE VALIDATE CONSTRAINTS does not obey NO INHERIT clause

    Hans Buschmann <buschmann@nidsa.net> — 2017-04-21T18:40:12Z

    The following bug has been logged on the website:
    
    Bug reference:      14629
    Logged by:          Hans Buschmann
    Email address:      buschmann@nidsa.net
    PostgreSQL version: 9.6.2
    Operating system:   Windows x64
    Description:        
    
    
    Given these both tables (orders_archiv inherits orders) on 9.6.2 Windows
    x64
    (cut/paste from psql)
    
    xxxdb=# \d orders_archiv;
    ...
    Check constraints:
        "ck_or_old" CHECK (or_season < 24) NO INHERIT
    Inherits: orders
    
    
    xxxdb=# \d orders
    ...
    Check constraints:
        "ck_or_new" CHECK (or_season >= 24) NO INHERIT NOT VALID
    Triggers:
        tr_orders_insert BEFORE INSERT ON orders FOR EACH ROW WHEN
    (new.or_season < 24) EXECUTE PROCEDURE fn_orders_insert()
    Number of child tables: 1 (Use \d+ to list them.)
    
    
    When applying these commands to the parent table, the following errors are
    returned:
    
    xxxdb=# alter table orders validate constraint ck_or_new;
    ERROR:  constraint "ck_or_new" of relation "orders_archiv" does not exist
    
    
    xxxdb=# alter table only orders validate constraint ck_or_new;
    ERROR:  constraint must be validated on child tables too
    
    Background:
    From our original partitioning of quite a lot of tables according to
    xx_season columns (a season is a half year period) I dropped and recreated
    the check constraintsin a not valid state.
    
    At the end of the script to move the data from 2 seasons into the archiv
    tables I tried to reenable the check constraints and encountered those two
    errors.
    
    It seems that I can circumvent these errors by recreating the constraints
    without the not valid clause.
    
    Do I miss something here ?
    
    Hans Buschmann
    
    
    
    
    
    
  2. Re: BUG #14629: ALTER TABLE VALIDATE CONSTRAINTS does not obey NO INHERIT clause

    Amit Langote <langote_amit_f8@lab.ntt.co.jp> — 2017-04-24T04:16:51Z

    On 2017/04/22 3:40, buschmann@nidsa.net wrote:
    > The following bug has been logged on the website:
    > 
    > Bug reference:      14629
    > Logged by:          Hans Buschmann
    > Email address:      buschmann@nidsa.net
    > PostgreSQL version: 9.6.2
    > Operating system:   Windows x64
    > Description:        
    > 
    > 
    > Given these both tables (orders_archiv inherits orders) on 9.6.2 Windows
    > x64
    > (cut/paste from psql)
    > 
    > xxxdb=# \d orders_archiv;
    > ...
    > Check constraints:
    >     "ck_or_old" CHECK (or_season < 24) NO INHERIT
    > Inherits: orders
    > 
    > 
    > xxxdb=# \d orders
    > ...
    > Check constraints:
    >     "ck_or_new" CHECK (or_season >= 24) NO INHERIT NOT VALID
    > Triggers:
    >     tr_orders_insert BEFORE INSERT ON orders FOR EACH ROW WHEN
    > (new.or_season < 24) EXECUTE PROCEDURE fn_orders_insert()
    > Number of child tables: 1 (Use \d+ to list them.)
    > 
    > 
    > When applying these commands to the parent table, the following errors are
    > returned:
    > 
    > xxxdb=# alter table orders validate constraint ck_or_new;
    > ERROR:  constraint "ck_or_new" of relation "orders_archiv" does not exist
    > 
    > 
    > xxxdb=# alter table only orders validate constraint ck_or_new;
    > ERROR:  constraint must be validated on child tables too
    > 
    > Background:
    > From our original partitioning of quite a lot of tables according to
    > xx_season columns (a season is a half year period) I dropped and recreated
    > the check constraintsin a not valid state.
    > 
    > At the end of the script to move the data from 2 seasons into the archiv
    > tables I tried to reenable the check constraints and encountered those two
    > errors.
    > 
    > It seems that I can circumvent these errors by recreating the constraints
    > without the not valid clause.
    > 
    > Do I miss something here ?
    
    Looks indeed like a bug to me.  Performing VALIDATE CONSTRAINT on what is
    a non-inheritable constraint shouldn't look for that constraint in the
    child tables.  Attached patch fixes that.  Should be applied in all of the
    supported branches.
    
    Thanks,
    Amit
    
  3. Re: [BUGS] BUG #14629: ALTER TABLE VALIDATE CONSTRAINTS does not obey NO INHERIT clause

    Amit Langote <langote_amit_f8@lab.ntt.co.jp> — 2017-04-27T00:16:06Z

    On 2017/04/24 13:16, Amit Langote wrote:
    > On 2017/04/22 3:40, buschmann@nidsa.net wrote:
    >> The following bug has been logged on the website:
    >>
    >> Bug reference:      14629
    >> Logged by:          Hans Buschmann
    >> Email address:      buschmann@nidsa.net
    >> PostgreSQL version: 9.6.2
    >> Operating system:   Windows x64
    >> Description:        
    >>
    >>
    >> Given these both tables (orders_archiv inherits orders) on 9.6.2 Windows
    >> x64
    >> (cut/paste from psql)
    >>
    >> xxxdb=# \d orders_archiv;
    >> ...
    >> Check constraints:
    >>     "ck_or_old" CHECK (or_season < 24) NO INHERIT
    >> Inherits: orders
    >>
    >>
    >> xxxdb=# \d orders
    >> ...
    >> Check constraints:
    >>     "ck_or_new" CHECK (or_season >= 24) NO INHERIT NOT VALID
    >> Triggers:
    >>     tr_orders_insert BEFORE INSERT ON orders FOR EACH ROW WHEN
    >> (new.or_season < 24) EXECUTE PROCEDURE fn_orders_insert()
    >> Number of child tables: 1 (Use \d+ to list them.)
    >>
    >>
    >> When applying these commands to the parent table, the following errors are
    >> returned:
    >>
    >> xxxdb=# alter table orders validate constraint ck_or_new;
    >> ERROR:  constraint "ck_or_new" of relation "orders_archiv" does not exist
    >>
    >>
    >> xxxdb=# alter table only orders validate constraint ck_or_new;
    >> ERROR:  constraint must be validated on child tables too
    >>
    >> Background:
    >> From our original partitioning of quite a lot of tables according to
    >> xx_season columns (a season is a half year period) I dropped and recreated
    >> the check constraintsin a not valid state.
    >>
    >> At the end of the script to move the data from 2 seasons into the archiv
    >> tables I tried to reenable the check constraints and encountered those two
    >> errors.
    >>
    >> It seems that I can circumvent these errors by recreating the constraints
    >> without the not valid clause.
    >>
    >> Do I miss something here ?
    > 
    > Looks indeed like a bug to me.  Performing VALIDATE CONSTRAINT on what is
    > a non-inheritable constraint shouldn't look for that constraint in the
    > child tables.  Attached patch fixes that.  Should be applied in all of the
    > supported branches.
    
    Should have included -hackers when posting the patch.  Here it is again
    for -hackers' perusal.
    
    Thanks,
    Amit
    
  4. Re: BUG #14629: ALTER TABLE VALIDATE CONSTRAINTS does not obey NO INHERIT clause

    Robert Haas <robertmhaas@gmail.com> — 2017-04-28T19:00:28Z

    On Mon, Apr 24, 2017 at 12:16 AM, Amit Langote
    <Langote_Amit_f8@lab.ntt.co.jp> wrote:
    > On 2017/04/22 3:40, buschmann@nidsa.net wrote:
    >> The following bug has been logged on the website:
    >>
    >> Bug reference:      14629
    >> Logged by:          Hans Buschmann
    >> Email address:      buschmann@nidsa.net
    >> PostgreSQL version: 9.6.2
    >> Operating system:   Windows x64
    >> Description:
    >>
    >>
    >> Given these both tables (orders_archiv inherits orders) on 9.6.2 Windows
    >> x64
    >> (cut/paste from psql)
    >>
    >> xxxdb=# \d orders_archiv;
    >> ...
    >> Check constraints:
    >>     "ck_or_old" CHECK (or_season < 24) NO INHERIT
    >> Inherits: orders
    >>
    >>
    >> xxxdb=# \d orders
    >> ...
    >> Check constraints:
    >>     "ck_or_new" CHECK (or_season >= 24) NO INHERIT NOT VALID
    >> Triggers:
    >>     tr_orders_insert BEFORE INSERT ON orders FOR EACH ROW WHEN
    >> (new.or_season < 24) EXECUTE PROCEDURE fn_orders_insert()
    >> Number of child tables: 1 (Use \d+ to list them.)
    >>
    >>
    >> When applying these commands to the parent table, the following errors are
    >> returned:
    >>
    >> xxxdb=# alter table orders validate constraint ck_or_new;
    >> ERROR:  constraint "ck_or_new" of relation "orders_archiv" does not exist
    >>
    >>
    >> xxxdb=# alter table only orders validate constraint ck_or_new;
    >> ERROR:  constraint must be validated on child tables too
    >>
    >> Background:
    >> From our original partitioning of quite a lot of tables according to
    >> xx_season columns (a season is a half year period) I dropped and recreated
    >> the check constraintsin a not valid state.
    >>
    >> At the end of the script to move the data from 2 seasons into the archiv
    >> tables I tried to reenable the check constraints and encountered those two
    >> errors.
    >>
    >> It seems that I can circumvent these errors by recreating the constraints
    >> without the not valid clause.
    >>
    >> Do I miss something here ?
    >
    > Looks indeed like a bug to me.  Performing VALIDATE CONSTRAINT on what is
    > a non-inheritable constraint shouldn't look for that constraint in the
    > child tables.  Attached patch fixes that.  Should be applied in all of the
    > supported branches.
    
    Done.
    
    -- 
    Robert Haas
    EnterpriseDB: http://www.enterprisedb.com
    The Enterprise PostgreSQL Company