Search Postgresql Archives

8.1 Table partition and getting error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am using POstgreql 8.1.
I create table partition as follows:
alter table crm rename to crm_bak;

CREATE TABLE crm
(
  crmid integer NOT NULL,
  description text,
  deleted integer NOT NULL DEFAULT 0
)
WITHOUT OIDS;
ALTER TABLE crm OWNER TO vcrm;


create table crm_deleted ( check ( deleted = 1 ) ) inherits (crm);
create table crm_active ( check ( deleted = 0 ) ) inherits (crm);


create index crm_deleted_idx on crm_active(deleted);
analyze crm_active;

CREATE OR REPLACE FUNCTION crm_insert_p()
RETURNS TRIGGER AS $$
BEGIN
  IF ( NEW.deleted = 0 ) THEN
  INSERT INTO crm_active VALUES (NEW.*);
  ELSE
  INSERT INTO crm_deleted VALUES (NEW.*);
  END IF;
  RETURN NULL;
END;
$$
LANGUAGE plpgsql;

CREATE TRIGGER crm_insert_t
 BEFORE INSERT ON crm
 FOR EACH ROW EXECUTE PROCEDURE crm_insert_p();
 
 
CREATE OR REPLACE FUNCTION crm_update_deleted_p()
RETURNS TRIGGER AS $$
  BEGIN
  IF (NEW.deleted = 1) THEN
  INSERT INTO crm_deleted VALUES (NEW.*);
  DELETE FROM crm_active WHERE crmid = NEW.crmid;
  ELSE
  RETURN (NEW.*);
  END IF;
  END; 
$$
LANGUAGE plpgsql;


CREATE TRIGGER crm_update_t
  BEFORE UPDATE ON crm
  FOR EACH ROW EXECUTE PROCEDURE crm_update_deleted_p();

INSERT INTO crm
SELECT * FROM crm_bak;  

select count(*) from crm;

select count(*) from crm_active;

select count(*) from crm_deleted;

set constraint_exclusion = on;

----------------------------------------------
It works fine.
But when I want to use the following sql, I get error:
update crm set deleted = 1 where crmid = 3;
ERROR: new row for relation "crm_active" violates check constraint "crm_active_deleted_check"

Any idea please.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux