Segmentation fault when changing view - Mailing list pgsql-bugs

From pgsql-bugs@postgresql.org
Subject Segmentation fault when changing view
Date
Msg-id 200104161907.f3GJ7qh66560@hub.org
Whole thread Raw
Responses Re: Segmentation fault when changing view
List pgsql-bugs
Vlad Seryakov (vlad@crystalballinc.com) reports a bug with a severity of 1
The lower the number the more severe it is.

Short Description
Segmentation fault when changing view

Long Description
When i dropped column quantity in view package_tree_view, recreated this view, but didn't recreated the view
package_packages_tree_viewand ran SQL statement below in Example, the server died with segfault. 
Earlier i remember it complaints about missing cache object but didn; crashed.
Thank you


Database schema:

CREATE TABLE usage_rates (
   rate_id VARCHAR(16) NOT NULL CHECK(rate_id != ''),
   rate_name VARCHAR(64) NOT NULL,
   description VARCHAR(255) NULL,
   CONSTRAINT usage_rates_pk PRIMARY KEY(rate_id),
   CONSTRAINT usage_rates_un UNIQUE(rate_name)
);

CREATE TABLE prices (
   price_id INTEGER NOT NULL CHECK(price_id > 0),
   install_price NUMERIC(5,2) DEFAULT 0 NOT NULL,
   periodic_price NUMERIC(5,2) DEFAULT 0 NOT NULL,
   usage_price NUMERIC(5,2) DEFAULT 0 NOT NULL,
   usage_rate VARCHAR(16) NULL
      CONSTRAINT service_usage_rate_fk REFERENCES usage_rates(rate_id),
   termination_price NUMERIC(5,2) DEFAULT 0 NOT NULL,
   CONSTRAINT prices_pk PRIMARY KEY(price_id)
);

CREATE TABLE service_status (
   status_id VARCHAR(16) NOT NULL CHECK(status_id != ''),
   status_name VARCHAR(64) NOT NULL,
   precedence SMALLINT NOT NULL,
   description VARCHAR(255) NULL,
   CONSTRAINT service_status_pk PRIMARY KEY(status_id),
   CONSTRAINT service_status_un UNIQUE(status_name)
);

CREATE TABLE services (
   service_id INTEGER NOT NULL CHECK(service_id > 0),
   service_name VARCHAR(64) NOT NULL,
   service_status VARCHAR(16) NOT NULL
      CONSTRAINT service_status_fk REFERENCES service_status(status_id),
   service_owner INTEGER NULL
      CONSTRAINT service_owner_fk REFERENCES services(service_id),
   description VARCHAR(255) NULL,
   path VARCHAR(255) NULL,
   CONSTRAINT services_pk PRIMARY KEY(service_id),
   CONSTRAINT service_un UNIQUE(service_name),
   CONSTRAINT service_owner_ck CHECK(service_id != service_owner)
);

CREATE TABLE packages (
   package_id INTEGER NOT NULL CHECK(package_id > 0),
   package_name VARCHAR(64) NOT NULL,
   package_status VARCHAR(16) NOT NULL
      CONSTRAINT package_status_fk REFERENCES service_status(status_id),
   start_date DATETIME NOT NULL,
   stop_date DATETIME NOT NULL,
   description VARCHAR(255) NULL,
   install_price NUMERIC(5,2) NULL,
   periodic_price NUMERIC(5,2) NULL,
   termination_price NUMERIC(5,2) NULL,
   CONSTRAINT packages_pk PRIMARY KEY(package_id),
   CONSTRAINT packages_un UNIQUE(package_name)
);

CREATE TABLE package_services (
   package_id INTEGER NOT NULL REFERENCES packages(package_id),
   service_id INTEGER NOT NULL REFERENCES services(service_id),
   quantity SMALLINT DEFAULT 1 NOT NULL,
   description VARCHAR(255) NULL,
   CONSTRAINT package_servies_pk PRIMARY KEY(package_id,service_id)
);
CREATE TABLE package_packages (
   package_id INTEGER NOT NULL
     CONSTRAINT packages_pkg_fk REFERENCES packages(package_id),
   package_owner INTEGER NOT NULL
     CONSTRAINT packages_pkg_owner_fk REFERENCES packages(package_id),
   price_id INTEGER NOT NULL
     CONSTRAINT packages_price_fk REFERENCES prices(price_id),
   CONSTRAINT packages_pkg_pk PRIMARY KEY(package_id,package_owner),
   CONSTRAINT packages_pkg_ck CHECK(package_id != package_owner)
);

CREATE TABLE package_tree (
   path VARCHAR(255) NOT NULL,
   id INTEGER NOT NULL
     CONSTRAINT packages_tree_id_fk REFERENCES packages(package_id),
   owner INTEGER NULL
     CONSTRAINT packages_tree_o_fk REFERENCES packages(package_id),
   tree_level INTEGER NOT NULL,
   leaf_node CHAR(1) DEFAULT 'N' NOT NULL
     CONSTRAINT packages_leaf_ck CHECK(leaf_node IN ('Y','N')),
   path2 VARCHAR(255) NOT NULL,
   CONSTRAINT packages_tree_pk PRIMARY KEY(path)
);

DROP VIEW packages_tree_view;
CREATE VIEW packages_tree_view AS
  SELECT p.package_id,
         p.package_name,
         p.package_status,
         status_name,
         ps.service_id,
         ps.quantity,
         COALESCE(p.description,ps.description) AS description,
         t.path,
         t.owner,
         t.tree_level,
         t.leaf_node,
         s.service_name,
         s.service_status
  FROM packages p,
       service_status,
       package_tree t
       LEFT OUTER JOIN package_services ps ON t.id=ps.package_id
       LEFT OUTER JOIN services s ON ps.service_id=s.service_id
  WHERE t.id=p.package_id AND
        p.package_status=status_id;

DROP VIEW package_packages_tree_view;
CREATE VIEW package_packages_tree_view AS
  SELECT pv.*,
         pr.price_id,
         pr.install_price,
         pr.periodic_price,
         pr.usage_price,
         pr.termination_price
  FROM packages_tree_view pv
       LEFT OUTER JOIN package_packages pp
       ON pv.package_id=pp.package_id AND
          pv.owner=pp.package_owner
       LEFT OUTER JOIN prices pr ON pr.price_id=pp.price_id;

INSERT INTO service_status (status_id,status_name,precedence,description)
            VALUES('planned','Planned Service,',0,'');

INSERT INTO service_status (status_id,status_name,precedence,description)
            VALUES('available','Available to order',1,'');

INSERT INTO service_status (status_id,status_name,precedence,description)
            VALUES('closed','End of Sales',2,'');

INSERT INTO service_status (status_id,status_name,precedence,description)
            VALUES('unsupported','End of Life',2,'');

INSERT INTO "services" VALUES (93,'Big Internet','available',2010995859,'fvfdv','2010
995859/93/');
INSERT INTO "services" VALUES (64,'Big Deal','available',NULL,NULL,'64/');
INSERT INTO "services" VALUES (2010995859,'Internet','available',NULL,NULL,'2010995859/'
);
INSERT INTO "services" VALUES (2010990658,'Phone','available',64,'dcvdc','64/20109906
58/');
INSERT INTO "packages" VALUES (66,'referg','available',now(),now(),'regr',NULL,NULL,NULL);
INSERT INTO "packages" VALUES (70,'test','available',now(),now(),'regre',NULL,NULL,NULL);
INSERT INTO "packages" VALUES (65,'Internet','available',now(),now(),'ttr','4.00','5.00','6.00');
INSERT INTO "packages" VALUES (122,'Phone','available',now(),now(),'rgrege',NULL,NULL,NULL);
INSERT INTO "packages" VALUES (113,'Huge Deal','available',now(),now(),'Super huge and great deal',NULL,NULL,NULL);
INSERT INTO "package_services" VALUES (65,2010995859,1,NULL);
INSERT INTO "package_services" VALUES (70,64,1,NULL);
INSERT INTO "package_services" VALUES (122,2010990658,1,'frgr');
INSERT INTO "package_services" VALUES (122,64,1,NULL);
INSERT INTO "prices" VALUES (72,'0.00','43.00','0.00',NULL,'0.00');
INSERT INTO "prices" VALUES (75,'0.00','4.00','0.00',NULL,'0.00');
INSERT INTO "prices" VALUES (114,'0.00','0.00','0.00',NULL,'0.00');
INSERT INTO "package_packages" VALUES (65,66,72);
INSERT INTO "package_packages" VALUES (65,70,75);
INSERT INTO "package_packages" VALUES (65,113,114);
INSERT INTO "package_tree" VALUES ('/B/C/',65,113,1,'Y','/113/65/');
INSERT INTO "package_tree" VALUES ('/B/',113,NULL,0,'N','/113/');
INSERT INTO "package_tree" VALUES ('/D/',65,NULL,0,'Y','/65/');
INSERT INTO "package_tree" VALUES ('/E/',122,NULL,0,'Y','/122/');
INSERT INTO "package_tree" VALUES ('/F/G/',65,66,1,'Y','/66/65/');
INSERT INTO "package_tree" VALUES ('/F/',66,NULL,0,'N','/66/');
INSERT INTO "package_tree" VALUES ('/H/I/',65,70,1,'Y','/70/65/');
INSERT INTO "package_tree" VALUES ('/H/',70,NULL,0,'N','/70/');


Sample Code
SELECT path,
       package_name,
       package_id,
       service_id,
       service_name,
       tree_level,
       status_name,
       install_price,
       periodic_price,
       termination_price
       FROM package_packages_tree_view
       WHERE path LIKE '/E/%/%'
      ORDER BY path,service_name;


No file was uploaded with this report

pgsql-bugs by date:

Previous
From: Patrick Dunford
Date:
Subject: Re: Possible ODBC driver error
Next
From: Tom Lane
Date:
Subject: Re: Segmentation fault when changing view