*** expected/int8.out Fri Apr 7 12:17:39 2000 --- results/int8.out Thu Dec 28 18:04:36 2000 *************** *** 145,166 **** FROM INT8_TBL; to_char_3 | to_char | to_char -----------+--------------------+------------------------ ! | <123> | <456.000> ! | <123> | <4567890123456789.000> ! | <4567890123456789> | <123.000> ! | <4567890123456789> | <4567890123456789.000> ! | <4567890123456789> | 4567890123456789.000 (5 rows) SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') FROM INT8_TBL; to_char_4 | to_char | to_char -----------+-------------------+------------------- ! | 123- | -456 ! | 123- | -4567890123456789 ! | 4567890123456789- | -123 ! | 4567890123456789- | -4567890123456789 ! | 4567890123456789- | +4567890123456789 (5 rows) SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL; --- 145,166 ---- FROM INT8_TBL; to_char_3 | to_char | to_char -----------+--------------------+------------------------ ! | 528280977285 | 1958505086520.000 ! | 528280977285 | <################.###> ! | <################> | 528280977285.000 ! | <################> | <################.###> ! | <################> | ################.### (5 rows) SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999') FROM INT8_TBL; to_char_4 | to_char | to_char -----------+-------------------+------------------- ! | 528280977285+ | +1958505086520 ! | 528280977285+ | -################ ! | ################- | +528280977285 ! | ################- | -################ ! | ################- | +################ (5 rows) SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL; ---------------------- *** expected/float8.out Sun Mar 19 21:19:10 2000 --- results/float8.out Thu Dec 28 18:04:40 2000 *************** *** 214,220 **** SET f1 = FLOAT8_TBL.f1 * '-1' WHERE FLOAT8_TBL.f1 > '0.0'; SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f; ! ERROR: Bad float8 input format -- overflow SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f; ERROR: pow() result is out of range SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ; --- 214,220 ---- SET f1 = FLOAT8_TBL.f1 * '-1' WHERE FLOAT8_TBL.f1 > '0.0'; SELECT '' AS bad, f.f1 * '1e200' from FLOAT8_TBL f; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS bad, f.f1 ^ '1e200' from FLOAT8_TBL f; ERROR: pow() result is out of range SELECT '' AS bad, ln(f.f1) from FLOAT8_TBL f where f.f1 = '0.0' ; ---------------------- *** expected/numerology.out Wed Mar 15 15:31:06 2000 --- results/numerology.out Thu Dec 28 18:05:25 2000 *************** *** 41,54 **** ------+-------- | -32767 | -1234 - | -1004 - | -35 - | 0 - | 0 | 0 | 1234 | 32767 ! (9 rows) -- int2 CREATE TABLE TEMP_INT2 (f1 INT2); --- 41,50 ---- ------+-------- | -32767 | -1234 | 0 | 1234 | 32767 ! (5 rows) -- int2 CREATE TABLE TEMP_INT2 (f1 INT2); *************** *** 61,73 **** SELECT '' AS five, f1 FROM TEMP_INT2 ORDER BY f1; five | f1 ! ------+------- ! | -1004 ! | -35 ! | 0 ! | 0 ! | 0 ! (5 rows) -- -- Group-by combinations --- 57,64 ---- SELECT '' AS five, f1 FROM TEMP_INT2 ORDER BY f1; five | f1 ! ------+---- ! (0 rows) -- -- Group-by combinations ---------------------- *** expected/timestamp.out Fri Apr 7 12:17:42 2000 --- results/timestamp.out Thu Dec 28 18:05:41 2000 *************** *** 190,265 **** INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); ERROR: Timestamp out of range 'Feb 16 17:32:01 5097 BC' SELECT '' AS "66", d1 FROM TIMESTAMP_TBL; ! 66 | d1 ! ----+--------------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | Mon Feb 10 17:32:01 1997 PST ! | invalid ! | invalid ! | Mon Feb 10 17:32:01.00 1997 PST ! | Mon Feb 10 17:32:02.00 1997 PST ! | Mon Feb 10 17:32:01.40 1997 PST ! | Mon Feb 10 17:32:01.50 1997 PST ! | Mon Feb 10 17:32:01.60 1997 PST ! | Thu Jan 02 00:00:00 1997 PST ! | Thu Jan 02 03:04:05 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Tue Jun 10 17:32:01 1997 PDT ! | Wed Mar 15 08:14:01 2000 PST ! | Wed Mar 15 04:14:02 2000 PST ! | Wed Mar 15 02:14:03 2000 PST ! | Wed Mar 15 03:14:04 2000 PST ! | Wed Mar 15 01:14:05 2000 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:00 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Tue Jun 10 18:32:01 1997 PDT ! | Mon Feb 10 17:32:01 1997 PST ! | Tue Feb 11 17:32:01 1997 PST ! | Wed Feb 12 17:32:01 1997 PST ! | Thu Feb 13 17:32:01 1997 PST ! | Fri Feb 14 17:32:01 1997 PST ! | Sat Feb 15 17:32:01 1997 PST ! | Sun Feb 16 17:32:01 1997 PST ! | Tue Feb 16 17:32 0097 BC ! | Sat Feb 16 17:32:01 0097 ! | Thu Feb 16 17:32:01 0597 ! | Tue Feb 16 17:32:01 1097 ! | Sat Feb 16 17:32:01 1697 ! | Thu Feb 16 17:32:01 1797 ! | Tue Feb 16 17:32:01 1897 ! | Sun Feb 16 17:32:01 1997 PST ! | Sat Feb 16 17:32:01 2097 ! | Wed Feb 28 17:32:01 1996 PST ! | Thu Feb 29 17:32:01 1996 PST ! | Fri Mar 01 17:32:01 1996 PST ! | Mon Dec 30 17:32:01 1996 PST ! | Tue Dec 31 17:32:01 1996 PST ! | Wed Jan 01 17:32:01 1997 PST ! | Fri Feb 28 17:32:01 1997 PST ! | Sat Mar 01 17:32:01 1997 PST ! | Tue Dec 30 17:32:01 1997 PST ! | Wed Dec 31 17:32:01 1997 PST ! | Fri Dec 31 17:32:01 1999 PST ! | Sat Jan 01 17:32:01 2000 PST ! | Sun Dec 31 17:32:01 2000 PST ! | Mon Jan 01 17:32:01 2001 PST ! (66 rows) ! -- Demonstrate functions and operators SELECT '' AS "47", d1 FROM TIMESTAMP_TBL WHERE d1 > timestamp '1997-01-02' and d1 != timestamp 'current'; --- 190,196 ---- INSERT INTO TIMESTAMP_TBL VALUES ('Feb 16 17:32:01 5097 BC'); ERROR: Timestamp out of range 'Feb 16 17:32:01 5097 BC' SELECT '' AS "66", d1 FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero -- Demonstrate functions and operators SELECT '' AS "47", d1 FROM TIMESTAMP_TBL WHERE d1 > timestamp '1997-01-02' and d1 != timestamp 'current'; *************** *** 487,633 **** (48 rows) SELECT '' AS "66", d1 + interval '1 year' AS one_year FROM TIMESTAMP_TBL; ! 66 | one_year ! ----+--------------------------------- ! | invalid ! | -infinity ! | infinity ! | Thu Dec 31 16:00:00 1970 PST ! | Tue Feb 10 17:32:01 1998 PST ! | invalid ! | invalid ! | Tue Feb 10 17:32:01.00 1998 PST ! | Tue Feb 10 17:32:02.00 1998 PST ! | Tue Feb 10 17:32:01.40 1998 PST ! | Tue Feb 10 17:32:01.50 1998 PST ! | Tue Feb 10 17:32:01.60 1998 PST ! | Fri Jan 02 00:00:00 1998 PST ! | Fri Jan 02 03:04:05 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Wed Jun 10 17:32:01 1998 PDT ! | Thu Mar 15 08:14:01 2001 PST ! | Thu Mar 15 04:14:02 2001 PST ! | Thu Mar 15 02:14:03 2001 PST ! | Thu Mar 15 03:14:04 2001 PST ! | Thu Mar 15 01:14:05 2001 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:00 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 17:32:01 1998 PST ! | Tue Feb 10 09:32:01 1998 PST ! | Tue Feb 10 09:32:01 1998 PST ! | Tue Feb 10 09:32:01 1998 PST ! | Wed Jun 10 18:32:01 1998 PDT ! | Tue Feb 10 17:32:01 1998 PST ! | Wed Feb 11 17:32:01 1998 PST ! | Thu Feb 12 17:32:01 1998 PST ! | Fri Feb 13 17:32:01 1998 PST ! | Sat Feb 14 17:32:01 1998 PST ! | Sun Feb 15 17:32:01 1998 PST ! | Mon Feb 16 17:32:01 1998 PST ! | Thu Feb 16 17:32 0096 BC ! | Sun Feb 16 17:32:01 0098 ! | Fri Feb 16 17:32:01 0598 ! | Wed Feb 16 17:32:01 1098 ! | Sun Feb 16 17:32:01 1698 ! | Fri Feb 16 17:32:01 1798 ! | Wed Feb 16 17:32:01 1898 ! | Mon Feb 16 17:32:01 1998 PST ! | Sun Feb 16 17:32:01 2098 ! | Fri Feb 28 17:32:01 1997 PST ! | Fri Feb 28 17:32:01 1997 PST ! | Sat Mar 01 17:32:01 1997 PST ! | Tue Dec 30 17:32:01 1997 PST ! | Wed Dec 31 17:32:01 1997 PST ! | Thu Jan 01 17:32:01 1998 PST ! | Sat Feb 28 17:32:01 1998 PST ! | Sun Mar 01 17:32:01 1998 PST ! | Wed Dec 30 17:32:01 1998 PST ! | Thu Dec 31 17:32:01 1998 PST ! | Sun Dec 31 17:32:01 2000 PST ! | Mon Jan 01 17:32:01 2001 PST ! | Mon Dec 31 17:32:01 2001 PST ! | Tue Jan 01 17:32:01 2002 PST ! (66 rows) ! SELECT '' AS "66", d1 - interval '1 year' AS one_year FROM TIMESTAMP_TBL; ! 66 | one_year ! ----+--------------------------------- ! | invalid ! | -infinity ! | infinity ! | Tue Dec 31 16:00:00 1968 PST ! | Sat Feb 10 17:32:01 1996 PST ! | invalid ! | invalid ! | Sat Feb 10 17:32:01.00 1996 PST ! | Sat Feb 10 17:32:02.00 1996 PST ! | Sat Feb 10 17:32:01.40 1996 PST ! | Sat Feb 10 17:32:01.50 1996 PST ! | Sat Feb 10 17:32:01.60 1996 PST ! | Tue Jan 02 00:00:00 1996 PST ! | Tue Jan 02 03:04:05 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Mon Jun 10 17:32:01 1996 PDT ! | Mon Mar 15 08:14:01 1999 PST ! | Mon Mar 15 04:14:02 1999 PST ! | Mon Mar 15 02:14:03 1999 PST ! | Mon Mar 15 03:14:04 1999 PST ! | Mon Mar 15 01:14:05 1999 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:00 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 17:32:01 1996 PST ! | Sat Feb 10 09:32:01 1996 PST ! | Sat Feb 10 09:32:01 1996 PST ! | Sat Feb 10 09:32:01 1996 PST ! | Mon Jun 10 18:32:01 1996 PDT ! | Sat Feb 10 17:32:01 1996 PST ! | Sun Feb 11 17:32:01 1996 PST ! | Mon Feb 12 17:32:01 1996 PST ! | Tue Feb 13 17:32:01 1996 PST ! | Wed Feb 14 17:32:01 1996 PST ! | Thu Feb 15 17:32:01 1996 PST ! | Fri Feb 16 17:32:01 1996 PST ! | Mon Feb 16 17:32 0098 BC ! | Thu Feb 16 17:32:01 0096 ! | Tue Feb 16 17:32:01 0596 ! | Sun Feb 16 17:32:01 1096 ! | Thu Feb 16 17:32:01 1696 ! | Tue Feb 16 17:32:01 1796 ! | Sun Feb 16 17:32:01 1896 ! | Fri Feb 16 17:32:01 1996 PST ! | Thu Feb 16 17:32:01 2096 ! | Tue Feb 28 17:32:01 1995 PST ! | Tue Feb 28 17:32:01 1995 PST ! | Wed Mar 01 17:32:01 1995 PST ! | Sat Dec 30 17:32:01 1995 PST ! | Sun Dec 31 17:32:01 1995 PST ! | Mon Jan 01 17:32:01 1996 PST ! | Wed Feb 28 17:32:01 1996 PST ! | Fri Mar 01 17:32:01 1996 PST ! | Mon Dec 30 17:32:01 1996 PST ! | Tue Dec 31 17:32:01 1996 PST ! | Thu Dec 31 17:32:01 1998 PST ! | Fri Jan 01 17:32:01 1999 PST ! | Fri Dec 31 17:32:01 1999 PST ! | Sat Jan 01 17:32:01 2000 PST ! (66 rows) ! SELECT '' AS "53", d1 - timestamp '1997-01-02' AS diff FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; 53 | diff --- 418,426 ---- (48 rows) SELECT '' AS "66", d1 + interval '1 year' AS one_year FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS "66", d1 - interval '1 year' AS one_year FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS "53", d1 - timestamp '1997-01-02' AS diff FROM TIMESTAMP_TBL WHERE d1 BETWEEN '1902-01-01' AND '2038-01-01'; 53 | diff ---------------------- *** expected/oidjoins.out Sat Jan 22 15:51:20 2000 --- results/oidjoins.out Thu Dec 28 18:05:46 2000 *************** *** 5,427 **** FROM pg_aggregate WHERE pg_aggregate.aggtransfn1 != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn1); ! oid | aggtransfn1 ! -----+------------- ! (0 rows) ! SELECT oid, pg_aggregate.aggtransfn2 FROM pg_aggregate WHERE pg_aggregate.aggtransfn2 != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn2); ! oid | aggtransfn2 ! -----+------------- ! (0 rows) ! SELECT oid, pg_aggregate.aggfinalfn FROM pg_aggregate WHERE pg_aggregate.aggfinalfn != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggfinalfn); ! oid | aggfinalfn ! -----+------------ ! (0 rows) ! SELECT oid, pg_aggregate.aggbasetype FROM pg_aggregate WHERE pg_aggregate.aggbasetype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggbasetype); ! oid | aggbasetype ! -----+------------- ! (0 rows) ! SELECT oid, pg_aggregate.aggtranstype1 FROM pg_aggregate WHERE pg_aggregate.aggtranstype1 != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype1); ! oid | aggtranstype1 ! -----+--------------- ! (0 rows) ! SELECT oid, pg_aggregate.aggtranstype2 FROM pg_aggregate WHERE pg_aggregate.aggtranstype2 != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype2); ! oid | aggtranstype2 ! -----+--------------- ! (0 rows) ! SELECT oid, pg_aggregate.aggfinaltype FROM pg_aggregate WHERE pg_aggregate.aggfinaltype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggfinaltype); ! oid | aggfinaltype ! -----+-------------- ! (0 rows) ! SELECT oid, pg_am.amgettuple FROM pg_am WHERE pg_am.amgettuple != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amgettuple); ! oid | amgettuple ! -----+------------ ! (0 rows) ! SELECT oid, pg_am.aminsert FROM pg_am WHERE pg_am.aminsert != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.aminsert); ! oid | aminsert ! -----+---------- ! (0 rows) ! SELECT oid, pg_am.amdelete FROM pg_am WHERE pg_am.amdelete != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amdelete); ! oid | amdelete ! -----+---------- ! (0 rows) ! SELECT oid, pg_am.ambeginscan FROM pg_am WHERE pg_am.ambeginscan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambeginscan); ! oid | ambeginscan ! -----+------------- ! (0 rows) ! SELECT oid, pg_am.amrescan FROM pg_am WHERE pg_am.amrescan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrescan); ! oid | amrescan ! -----+---------- ! (0 rows) ! SELECT oid, pg_am.amendscan FROM pg_am WHERE pg_am.amendscan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amendscan); ! oid | amendscan ! -----+----------- ! (0 rows) ! SELECT oid, pg_am.ammarkpos FROM pg_am WHERE pg_am.ammarkpos != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ammarkpos); ! oid | ammarkpos ! -----+----------- ! (0 rows) ! SELECT oid, pg_am.amrestrpos FROM pg_am WHERE pg_am.amrestrpos != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrestrpos); ! oid | amrestrpos ! -----+------------ ! (0 rows) ! SELECT oid, pg_am.ambuild FROM pg_am WHERE pg_am.ambuild != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambuild); ! oid | ambuild ! -----+--------- ! (0 rows) ! SELECT oid, pg_am.amcostestimate FROM pg_am WHERE pg_am.amcostestimate != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amcostestimate); ! oid | amcostestimate ! -----+---------------- ! (0 rows) ! SELECT oid, pg_amop.amopid FROM pg_amop WHERE pg_amop.amopid != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amop.amopid); ! oid | amopid ! -----+-------- ! (0 rows) ! SELECT oid, pg_amop.amopclaid FROM pg_amop WHERE pg_amop.amopclaid != 0 AND NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amop.amopclaid); ! oid | amopclaid ! -----+----------- ! (0 rows) ! SELECT oid, pg_amop.amopopr FROM pg_amop WHERE pg_amop.amopopr != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_amop.amopopr); ! oid | amopopr ! -----+--------- ! (0 rows) ! SELECT oid, pg_amproc.amid FROM pg_amproc WHERE pg_amproc.amid != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amproc.amid); ! oid | amid ! -----+------ ! (0 rows) ! SELECT oid, pg_amproc.amopclaid FROM pg_amproc WHERE pg_amproc.amopclaid != 0 AND NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amproc.amopclaid); ! oid | amopclaid ! -----+----------- ! (0 rows) ! SELECT oid, pg_amproc.amproc FROM pg_amproc WHERE pg_amproc.amproc != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amproc.amproc); ! oid | amproc ! -----+-------- ! (0 rows) ! SELECT oid, pg_attribute.attrelid FROM pg_attribute WHERE pg_attribute.attrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_attribute.attrelid); ! oid | attrelid ! -----+---------- ! (0 rows) ! SELECT oid, pg_attribute.atttypid FROM pg_attribute WHERE pg_attribute.atttypid != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_attribute.atttypid); ! oid | atttypid ! -----+---------- ! (0 rows) ! SELECT oid, pg_class.reltype FROM pg_class WHERE pg_class.reltype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_class.reltype); ! oid | reltype ! -----+--------- ! (0 rows) ! SELECT oid, pg_class.relam FROM pg_class WHERE pg_class.relam != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_class.relam); ! oid | relam ! -----+------- ! (0 rows) ! SELECT oid, pg_index.indexrelid FROM pg_index WHERE pg_index.indexrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indexrelid); ! oid | indexrelid ! -----+------------ ! (0 rows) ! SELECT oid, pg_index.indrelid FROM pg_index WHERE pg_index.indrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indrelid); ! oid | indrelid ! -----+---------- ! (0 rows) ! SELECT oid, pg_opclass.opcdeftype FROM pg_opclass WHERE pg_opclass.opcdeftype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_opclass.opcdeftype); ! oid | opcdeftype ! -----+------------ ! (0 rows) ! SELECT oid, pg_operator.oprleft FROM pg_operator WHERE pg_operator.oprleft != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprleft); ! oid | oprleft ! -----+--------- ! (0 rows) ! SELECT oid, pg_operator.oprright FROM pg_operator WHERE pg_operator.oprright != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprright); ! oid | oprright ! -----+---------- ! (0 rows) ! SELECT oid, pg_operator.oprresult FROM pg_operator WHERE pg_operator.oprresult != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprresult); ! oid | oprresult ! -----+----------- ! (0 rows) ! SELECT oid, pg_operator.oprcom FROM pg_operator WHERE pg_operator.oprcom != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprcom); ! oid | oprcom ! -----+-------- ! (0 rows) ! SELECT oid, pg_operator.oprnegate FROM pg_operator WHERE pg_operator.oprnegate != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprnegate); ! oid | oprnegate ! -----+----------- ! (0 rows) ! SELECT oid, pg_operator.oprlsortop FROM pg_operator WHERE pg_operator.oprlsortop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprlsortop); ! oid | oprlsortop ! -----+------------ ! (0 rows) ! SELECT oid, pg_operator.oprrsortop FROM pg_operator WHERE pg_operator.oprrsortop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprrsortop); ! oid | oprrsortop ! -----+------------ ! (0 rows) ! SELECT oid, pg_operator.oprcode FROM pg_operator WHERE pg_operator.oprcode != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprcode); ! oid | oprcode ! -----+--------- ! (0 rows) ! SELECT oid, pg_operator.oprrest FROM pg_operator WHERE pg_operator.oprrest != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprrest); ! oid | oprrest ! -----+--------- ! (0 rows) ! SELECT oid, pg_operator.oprjoin FROM pg_operator WHERE pg_operator.oprjoin != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprjoin); ! oid | oprjoin ! -----+--------- ! (0 rows) ! SELECT oid, pg_proc.prolang FROM pg_proc WHERE pg_proc.prolang != 0 AND NOT EXISTS(SELECT * FROM pg_language AS t1 WHERE t1.oid = pg_proc.prolang); ! oid | prolang ! -----+--------- ! (0 rows) ! SELECT oid, pg_proc.prorettype FROM pg_proc WHERE pg_proc.prorettype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_proc.prorettype); ! oid | prorettype ! -----+------------ ! (0 rows) ! SELECT oid, pg_rewrite.ev_class FROM pg_rewrite WHERE pg_rewrite.ev_class != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_rewrite.ev_class); ! oid | ev_class ! -----+---------- ! (0 rows) ! SELECT oid, pg_statistic.starelid FROM pg_statistic WHERE pg_statistic.starelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_statistic.starelid); ! oid | starelid ! -----+---------- ! (0 rows) ! SELECT oid, pg_statistic.staop FROM pg_statistic WHERE pg_statistic.staop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_statistic.staop); ! oid | staop ! -----+------- ! (0 rows) ! SELECT oid, pg_trigger.tgrelid FROM pg_trigger WHERE pg_trigger.tgrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_trigger.tgrelid); ! oid | tgrelid ! -----+--------- ! (0 rows) ! SELECT oid, pg_trigger.tgfoid FROM pg_trigger WHERE pg_trigger.tgfoid != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_trigger.tgfoid); ! oid | tgfoid ! -----+-------- ! (0 rows) ! SELECT oid, pg_type.typrelid FROM pg_type WHERE pg_type.typrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_type.typrelid); ! oid | typrelid ! -----+---------- ! (0 rows) ! SELECT oid, pg_type.typelem FROM pg_type WHERE pg_type.typelem != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_type.typelem); ! oid | typelem ! -----+--------- ! (0 rows) ! SELECT oid, pg_type.typinput FROM pg_type WHERE pg_type.typinput != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typinput); ! oid | typinput ! -----+---------- ! (0 rows) ! SELECT oid, pg_type.typoutput FROM pg_type WHERE pg_type.typoutput != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typoutput); ! oid | typoutput ! -----+----------- ! (0 rows) ! SELECT oid, pg_type.typreceive FROM pg_type WHERE pg_type.typreceive != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typreceive); ! oid | typreceive ! -----+------------ ! (0 rows) ! SELECT oid, pg_type.typsend FROM pg_type WHERE pg_type.typsend != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typsend); ! oid | typsend ! -----+--------- ! (0 rows) ! --- 5,268 ---- FROM pg_aggregate WHERE pg_aggregate.aggtransfn1 != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn1); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_aggregate.aggtransfn2 FROM pg_aggregate WHERE pg_aggregate.aggtransfn2 != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggtransfn2); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_aggregate.aggfinalfn FROM pg_aggregate WHERE pg_aggregate.aggfinalfn != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_aggregate.aggfinalfn); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_aggregate.aggbasetype FROM pg_aggregate WHERE pg_aggregate.aggbasetype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggbasetype); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_aggregate.aggtranstype1 FROM pg_aggregate WHERE pg_aggregate.aggtranstype1 != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype1); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_aggregate.aggtranstype2 FROM pg_aggregate WHERE pg_aggregate.aggtranstype2 != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggtranstype2); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_aggregate.aggfinaltype FROM pg_aggregate WHERE pg_aggregate.aggfinaltype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_aggregate.aggfinaltype); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_am.amgettuple FROM pg_am WHERE pg_am.amgettuple != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amgettuple); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.aminsert FROM pg_am WHERE pg_am.aminsert != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.aminsert); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.amdelete FROM pg_am WHERE pg_am.amdelete != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amdelete); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.ambeginscan FROM pg_am WHERE pg_am.ambeginscan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambeginscan); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.amrescan FROM pg_am WHERE pg_am.amrescan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrescan); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.amendscan FROM pg_am WHERE pg_am.amendscan != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amendscan); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.ammarkpos FROM pg_am WHERE pg_am.ammarkpos != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ammarkpos); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.amrestrpos FROM pg_am WHERE pg_am.amrestrpos != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amrestrpos); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.ambuild FROM pg_am WHERE pg_am.ambuild != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.ambuild); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_am.amcostestimate FROM pg_am WHERE pg_am.amcostestimate != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_am.amcostestimate); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_amop.amopid FROM pg_amop WHERE pg_amop.amopid != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amop.amopid); ! ERROR: getattproperties: no attribute tuple 16631 -2 SELECT oid, pg_amop.amopclaid FROM pg_amop WHERE pg_amop.amopclaid != 0 AND NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amop.amopclaid); ! ERROR: getattproperties: no attribute tuple 16621 -2 SELECT oid, pg_amop.amopopr FROM pg_amop WHERE pg_amop.amopopr != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_amop.amopopr); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_amproc.amid FROM pg_amproc WHERE pg_amproc.amid != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_amproc.amid); ! ERROR: getattproperties: no attribute tuple 16631 -2 SELECT oid, pg_amproc.amopclaid FROM pg_amproc WHERE pg_amproc.amopclaid != 0 AND NOT EXISTS(SELECT * FROM pg_opclass AS t1 WHERE t1.oid = pg_amproc.amopclaid); ! ERROR: getattproperties: no attribute tuple 16621 -2 SELECT oid, pg_amproc.amproc FROM pg_amproc WHERE pg_amproc.amproc != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_amproc.amproc); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_attribute.attrelid FROM pg_attribute WHERE pg_attribute.attrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_attribute.attrelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_attribute.atttypid FROM pg_attribute WHERE pg_attribute.atttypid != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_attribute.atttypid); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_class.reltype FROM pg_class WHERE pg_class.reltype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_class.reltype); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_class.relam FROM pg_class WHERE pg_class.relam != 0 AND NOT EXISTS(SELECT * FROM pg_am AS t1 WHERE t1.oid = pg_class.relam); ! ERROR: getattproperties: no attribute tuple 16631 -2 SELECT oid, pg_index.indexrelid FROM pg_index WHERE pg_index.indexrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indexrelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_index.indrelid FROM pg_index WHERE pg_index.indrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_index.indrelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_opclass.opcdeftype FROM pg_opclass WHERE pg_opclass.opcdeftype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_opclass.opcdeftype); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_operator.oprleft FROM pg_operator WHERE pg_operator.oprleft != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprleft); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_operator.oprright FROM pg_operator WHERE pg_operator.oprright != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprright); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_operator.oprresult FROM pg_operator WHERE pg_operator.oprresult != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_operator.oprresult); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_operator.oprcom FROM pg_operator WHERE pg_operator.oprcom != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprcom); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_operator.oprnegate FROM pg_operator WHERE pg_operator.oprnegate != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprnegate); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_operator.oprlsortop FROM pg_operator WHERE pg_operator.oprlsortop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprlsortop); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_operator.oprrsortop FROM pg_operator WHERE pg_operator.oprrsortop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_operator.oprrsortop); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_operator.oprcode FROM pg_operator WHERE pg_operator.oprcode != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprcode); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_operator.oprrest FROM pg_operator WHERE pg_operator.oprrest != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprrest); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_operator.oprjoin FROM pg_operator WHERE pg_operator.oprjoin != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_operator.oprjoin); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_proc.prolang FROM pg_proc WHERE pg_proc.prolang != 0 AND NOT EXISTS(SELECT * FROM pg_language AS t1 WHERE t1.oid = pg_proc.prolang); ! ERROR: getattproperties: no attribute tuple 16919 -2 SELECT oid, pg_proc.prorettype FROM pg_proc WHERE pg_proc.prorettype != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_proc.prorettype); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_rewrite.ev_class FROM pg_rewrite WHERE pg_rewrite.ev_class != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_rewrite.ev_class); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_statistic.starelid FROM pg_statistic WHERE pg_statistic.starelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_statistic.starelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_statistic.staop FROM pg_statistic WHERE pg_statistic.staop != 0 AND NOT EXISTS(SELECT * FROM pg_operator AS t1 WHERE t1.oid = pg_statistic.staop); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT oid, pg_trigger.tgrelid FROM pg_trigger WHERE pg_trigger.tgrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_trigger.tgrelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_trigger.tgfoid FROM pg_trigger WHERE pg_trigger.tgfoid != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_trigger.tgfoid); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_type.typrelid FROM pg_type WHERE pg_type.typrelid != 0 AND NOT EXISTS(SELECT * FROM pg_class AS t1 WHERE t1.oid = pg_type.typrelid); ! ERROR: getattproperties: no attribute tuple 1259 -2 SELECT oid, pg_type.typelem FROM pg_type WHERE pg_type.typelem != 0 AND NOT EXISTS(SELECT * FROM pg_type AS t1 WHERE t1.oid = pg_type.typelem); ! ERROR: getattproperties: no attribute tuple 1247 -2 SELECT oid, pg_type.typinput FROM pg_type WHERE pg_type.typinput != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typinput); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_type.typoutput FROM pg_type WHERE pg_type.typoutput != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typoutput); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_type.typreceive FROM pg_type WHERE pg_type.typreceive != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typreceive); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT oid, pg_type.typsend FROM pg_type WHERE pg_type.typsend != 0 AND NOT EXISTS(SELECT * FROM pg_proc AS t1 WHERE t1.oid = pg_type.typsend); ! ERROR: getattproperties: no attribute tuple 1255 -2 ---------------------- *** expected/type_sanity.out Tue Jan 4 22:06:23 2000 --- results/type_sanity.out Thu Dec 28 18:05:46 2000 *************** *** 21,28 **** (p1.typalign != 'c' AND p1.typalign != 's' AND p1.typalign != 'i' AND p1.typalign != 'd'); oid | typname ! -----+--------- ! (0 rows) -- Look for "pass by value" types that can't be passed by value. SELECT p1.oid, p1.typname --- 21,85 ---- (p1.typalign != 'c' AND p1.typalign != 's' AND p1.typalign != 'i' AND p1.typalign != 'd'); oid | typname ! ------+------------- ! 17 | bytea ! 25 | text ! 32 | SET ! 602 | path ! 604 | polygon ! 629 | _line ! 705 | unknown ! 719 | _circle ! 791 | _money ! 869 | inet ! 650 | cidr ! 1000 | _bool ! 1001 | _bytea ! 1002 | _char ! 1003 | _name ! 1005 | _int2 ! 1006 | _int2vector ! 1007 | _int4 ! 1008 | _regproc ! 1009 | _text ! 1028 | _oid ! 1010 | _tid ! 1011 | _xid ! 1012 | _cid ! 1013 | _oidvector ! 1014 | _bpchar ! 1015 | _varchar ! 1016 | _int8 ! 1017 | _point ! 1018 | _lseg ! 1019 | _path ! 1020 | _box ! 1021 | _float4 ! 1022 | _float8 ! 1023 | _abstime ! 1024 | _reltime ! 1025 | _tinterval ! 1026 | _filename ! 1027 | _polygon ! 1034 | _aclitem ! 1040 | _macaddr ! 1041 | _inet ! 651 | _cidr ! 1042 | bpchar ! 1043 | varchar ! 1182 | _date ! 1183 | _time ! 1185 | _timestamp ! 1187 | _interval ! 1231 | _numeric ! 1270 | _timetz ! 1560 | bit ! 1561 | _bit ! 1562 | varbit ! 1563 | _varbit ! 1625 | lztext ! 1700 | numeric ! (57 rows) -- Look for "pass by value" types that can't be passed by value. SELECT p1.oid, p1.typname *************** *** 64,73 **** WHERE p1.typinput = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 3 OR p2.proretset OR p2.proargtypes[2] != 23); ! oid | typname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Check for bogus typoutput routines -- The first OR subclause detects bogus non-array cases, -- the second one detects bogus array cases. --- 121,127 ---- WHERE p1.typinput = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 3 OR p2.proretset OR p2.proargtypes[2] != 23); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Check for bogus typoutput routines -- The first OR subclause detects bogus non-array cases, -- the second one detects bogus array cases. *************** *** 77,86 **** WHERE p1.typoutput = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 2 OR p2.proretset OR p1.typelem = 0); ! oid | typname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Check for bogus typreceive routines -- FIXME: ought to check prorettype, but there are special cases that make it -- hard: prorettype might be binary-compatible with the type but not the same, --- 131,137 ---- WHERE p1.typoutput = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 2 OR p2.proretset OR p1.typelem = 0); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Check for bogus typreceive routines -- FIXME: ought to check prorettype, but there are special cases that make it -- hard: prorettype might be binary-compatible with the type but not the same, *************** *** 90,99 **** WHERE p1.typreceive = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 3 OR p2.proretset OR p2.proargtypes[2] != 23); ! oid | typname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Check for bogus typsend routines -- The first OR subclause detects bogus non-array cases, -- the second one detects bogus array cases. --- 141,147 ---- WHERE p1.typreceive = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 3 OR p2.proretset OR p2.proargtypes[2] != 23); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Check for bogus typsend routines -- The first OR subclause detects bogus non-array cases, -- the second one detects bogus array cases. *************** *** 103,112 **** WHERE p1.typsend = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 2 OR p2.proretset OR p1.typelem = 0); ! oid | typname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- **************** pg_class **************** -- Look for illegal values in pg_class fields SELECT p1.oid, p1.relname --- 151,157 ---- WHERE p1.typsend = p2.oid AND p1.typtype = 'b' AND (p2.pronargs != 1 OR p2.proretset) AND (p2.pronargs != 2 OR p2.proretset OR p1.typelem = 0); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- **************** pg_class **************** -- Look for illegal values in pg_class fields SELECT p1.oid, p1.relname *************** *** 133,140 **** WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR p1.attcacheoff != -1; oid | attrelid | attname ! -----+----------+--------- ! (0 rows) -- Look for duplicate pg_attribute entries -- (This would not be necessary if the indexes on pg_attribute were UNIQUE?) --- 178,944 ---- WHERE p1.attrelid = 0 OR p1.atttypid = 0 OR p1.attnum = 0 OR p1.attcacheoff != -1; oid | attrelid | attname ! --------+----------+----------------- ! 16385 | 1247 | typname ! 16386 | 1247 | typowner ! 16387 | 1247 | typlen ! 16388 | 1247 | typprtlen ! 16389 | 1247 | typbyval ! 16390 | 1247 | typtype ! 16391 | 1247 | typisdefined ! 16392 | 1247 | typdelim ! 16393 | 1247 | typrelid ! 16394 | 1247 | typelem ! 16395 | 1247 | typinput ! 16396 | 1247 | typoutput ! 16397 | 1247 | typreceive ! 16398 | 1247 | typsend ! 16399 | 1247 | typalign ! 16400 | 1247 | typdefault ! 16401 | 1247 | ctid ! 16402 | 1247 | oid ! 16403 | 1247 | xmin ! 16404 | 1247 | cmin ! 16405 | 1247 | xmax ! 16406 | 1247 | cmax ! 16407 | 1262 | datname ! 16408 | 1262 | datdba ! 16409 | 1262 | encoding ! 16410 | 1262 | datpath ! 16411 | 1262 | ctid ! 16412 | 1262 | oid ! 16413 | 1262 | xmin ! 16414 | 1262 | cmin ! 16415 | 1262 | xmax ! 16416 | 1262 | cmax ! 16417 | 1255 | proname ! 16418 | 1255 | proowner ! 16419 | 1255 | prolang ! 16420 | 1255 | proisinh ! 16421 | 1255 | proistrusted ! 16422 | 1255 | proiscachable ! 16423 | 1255 | pronargs ! 16424 | 1255 | proretset ! 16425 | 1255 | prorettype ! 16426 | 1255 | proargtypes ! 16427 | 1255 | probyte_pct ! 16428 | 1255 | properbyte_cpu ! 16429 | 1255 | propercall_cpu ! 16430 | 1255 | prooutin_ratio ! 16431 | 1255 | prosrc ! 16432 | 1255 | probin ! 16433 | 1255 | ctid ! 16434 | 1255 | oid ! 16435 | 1255 | xmin ! 16436 | 1255 | cmin ! 16437 | 1255 | xmax ! 16438 | 1255 | cmax ! 16439 | 1260 | usename ! 16440 | 1260 | usesysid ! 16441 | 1260 | usecreatedb ! 16442 | 1260 | usetrace ! 16443 | 1260 | usesuper ! 16444 | 1260 | usecatupd ! 16445 | 1260 | passwd ! 16446 | 1260 | valuntil ! 16447 | 1260 | ctid ! 16448 | 1260 | oid ! 16449 | 1260 | xmin ! 16450 | 1260 | cmin ! 16451 | 1260 | xmax ! 16452 | 1260 | cmax ! 16453 | 1261 | groname ! 16454 | 1261 | grosysid ! 16455 | 1261 | grolist ! 16456 | 1261 | ctid ! 16457 | 1261 | oid ! 16458 | 1261 | xmin ! 16459 | 1261 | cmin ! 16460 | 1261 | xmax ! 16461 | 1261 | cmax ! 16462 | 1249 | attrelid ! 16463 | 1249 | attname ! 16464 | 1249 | atttypid ! 16465 | 1249 | attdisbursion ! 16466 | 1249 | attlen ! 16467 | 1249 | attnum ! 16468 | 1249 | attnelems ! 16469 | 1249 | attcacheoff ! 16470 | 1249 | atttypmod ! 16471 | 1249 | attbyval ! 16472 | 1249 | attstorage ! 16473 | 1249 | attisset ! 16474 | 1249 | attalign ! 16475 | 1249 | attnotnull ! 16476 | 1249 | atthasdef ! 16477 | 1249 | ctid ! 16478 | 1249 | oid ! 16479 | 1249 | xmin ! 16480 | 1249 | cmin ! 16481 | 1249 | xmax ! 16482 | 1249 | cmax ! 16483 | 1259 | relname ! 16484 | 1259 | reltype ! 16485 | 1259 | relowner ! 16486 | 1259 | relam ! 16487 | 1259 | relpages ! 16488 | 1259 | reltuples ! 16489 | 1259 | rellongrelid ! 16490 | 1259 | relhasindex ! 16491 | 1259 | relisshared ! 16492 | 1259 | relkind ! 16493 | 1259 | relnatts ! 16494 | 1259 | relchecks ! 16495 | 1259 | reltriggers ! 16496 | 1259 | relukeys ! 16497 | 1259 | relfkeys ! 16498 | 1259 | relrefs ! 16499 | 1259 | relhaspkey ! 16500 | 1259 | relhasrules ! 16501 | 1259 | relacl ! 16502 | 1259 | ctid ! 16503 | 1259 | oid ! 16504 | 1259 | xmin ! 16505 | 1259 | cmin ! 16506 | 1259 | xmax ! 16507 | 1259 | cmax ! 16508 | 1215 | adrelid ! 16509 | 1215 | adnum ! 16510 | 1215 | adbin ! 16511 | 1215 | adsrc ! 16512 | 1215 | ctid ! 16513 | 1215 | oid ! 16514 | 1215 | xmin ! 16515 | 1215 | cmin ! 16516 | 1215 | xmax ! 16517 | 1215 | cmax ! 16518 | 1216 | rcrelid ! 16519 | 1216 | rcname ! 16520 | 1216 | rcbin ! 16521 | 1216 | rcsrc ! 16522 | 1216 | ctid ! 16523 | 1216 | oid ! 16524 | 1216 | xmin ! 16525 | 1216 | cmin ! 16526 | 1216 | xmax ! 16527 | 1216 | cmax ! 16528 | 1219 | tgrelid ! 16529 | 1219 | tgname ! 16530 | 1219 | tgfoid ! 16531 | 1219 | tgtype ! 16532 | 1219 | tgenabled ! 16533 | 1219 | tgisconstraint ! 16534 | 1219 | tgconstrname ! 16535 | 1219 | tgconstrrelid ! 16536 | 1219 | tgdeferrable ! 16537 | 1219 | tginitdeferred ! 16538 | 1219 | tgnargs ! 16539 | 1219 | tgattr ! 16540 | 1219 | tgargs ! 16541 | 1219 | ctid ! 16542 | 1219 | oid ! 16543 | 1219 | xmin ! 16544 | 1219 | cmin ! 16545 | 1219 | xmax ! 16546 | 1219 | cmax ! 16547 | 1264 | varfoo ! 16548 | 1269 | logfoo ! 16549 | 376 | xactlockfoo ! 16552 | 16550 | inhrelid ! 16553 | 16550 | inhparent ! 16554 | 16550 | inhseqno ! 16555 | 16550 | ctid ! 16556 | 16550 | oid ! 16557 | 16550 | xmin ! 16558 | 16550 | cmin ! 16559 | 16550 | xmax ! 16560 | 16550 | cmax ! 16563 | 16561 | indexrelid ! 16564 | 16561 | indrelid ! 16565 | 16561 | indproc ! 16566 | 16561 | indkey ! 16567 | 16561 | indclass ! 16568 | 16561 | indisclustered ! 16569 | 16561 | indislossy ! 16570 | 16561 | indhaskeytype ! 16571 | 16561 | indisunique ! 16572 | 16561 | indisprimary ! 16573 | 16561 | indreference ! 16574 | 16561 | indpred ! 16575 | 16561 | ctid ! 16576 | 16561 | oid ! 16577 | 16561 | xmin ! 16578 | 16561 | cmin ! 16579 | 16561 | xmax ! 16580 | 16561 | cmax ! 16583 | 16581 | starelid ! 16584 | 16581 | staattnum ! 16585 | 16581 | staop ! 16586 | 16581 | stanullfrac ! 16587 | 16581 | stacommonfrac ! 16588 | 16581 | stacommonval ! 16589 | 16581 | staloval ! 16590 | 16581 | stahival ! 16591 | 16581 | ctid ! 16592 | 16581 | oid ! 16593 | 16581 | xmin ! 16594 | 16581 | cmin ! 16595 | 16581 | xmax ! 16596 | 16581 | cmax ! 16599 | 16597 | oprname ! 16600 | 16597 | oprowner ! 16601 | 16597 | oprprec ! 16602 | 16597 | oprkind ! 16603 | 16597 | oprisleft ! 16604 | 16597 | oprcanhash ! 16605 | 16597 | oprleft ! 16606 | 16597 | oprright ! 16607 | 16597 | oprresult ! 16608 | 16597 | oprcom ! 16609 | 16597 | oprnegate ! 16610 | 16597 | oprlsortop ! 16611 | 16597 | oprrsortop ! 16612 | 16597 | oprcode ! 16613 | 16597 | oprrest ! 16614 | 16597 | oprjoin ! 16615 | 16597 | ctid ! 16616 | 16597 | oid ! 16617 | 16597 | xmin ! 16618 | 16597 | cmin ! 16619 | 16597 | xmax ! 16620 | 16597 | cmax ! 16623 | 16621 | opcname ! 16624 | 16621 | opcdeftype ! 16625 | 16621 | ctid ! 16626 | 16621 | oid ! 16627 | 16621 | xmin ! 16628 | 16621 | cmin ! 16629 | 16621 | xmax ! 16630 | 16621 | cmax ! 16633 | 16631 | amname ! 16634 | 16631 | amowner ! 16635 | 16631 | amstrategies ! 16636 | 16631 | amsupport ! 16637 | 16631 | amorderstrategy ! 16638 | 16631 | amgettuple ! 16639 | 16631 | aminsert ! 16640 | 16631 | amdelete ! 16641 | 16631 | amgetattr ! 16642 | 16631 | amsetlock ! 16643 | 16631 | amsettid ! 16644 | 16631 | amfreetuple ! 16645 | 16631 | ambeginscan ! 16646 | 16631 | amrescan ! 16647 | 16631 | amendscan ! 16648 | 16631 | ammarkpos ! 16649 | 16631 | amrestrpos ! 16650 | 16631 | amopen ! 16651 | 16631 | amclose ! 16652 | 16631 | ambuild ! 16653 | 16631 | amcreate ! 16654 | 16631 | amdestroy ! 16655 | 16631 | amcostestimate ! 16656 | 16631 | ctid ! 16657 | 16631 | oid ! 16658 | 16631 | xmin ! 16659 | 16631 | cmin ! 16660 | 16631 | xmax ! 16661 | 16631 | cmax ! 16664 | 16662 | amopid ! 16665 | 16662 | amopclaid ! 16666 | 16662 | amopopr ! 16667 | 16662 | amopstrategy ! 16668 | 16662 | ctid ! 16669 | 16662 | oid ! 16670 | 16662 | xmin ! 16671 | 16662 | cmin ! 16672 | 16662 | xmax ! 16673 | 16662 | cmax ! 16858 | 16856 | amid ! 16859 | 16856 | amopclaid ! 16860 | 16856 | amproc ! 16861 | 16856 | amprocnum ! 16862 | 16856 | ctid ! 16863 | 16856 | oid ! 16864 | 16856 | xmin ! 16865 | 16856 | cmin ! 16866 | 16856 | xmax ! 16867 | 16856 | cmax ! 16921 | 16919 | lanname ! 16922 | 16919 | lanispl ! 16923 | 16919 | lanpltrusted ! 16924 | 16919 | lanplcallfoid ! 16925 | 16919 | lancompiler ! 16926 | 16919 | ctid ! 16927 | 16919 | oid ! 16928 | 16919 | xmin ! 16929 | 16919 | cmin ! 16930 | 16919 | xmax ! 16931 | 16919 | cmax ! 16934 | 16932 | aggname ! 16935 | 16932 | aggowner ! 16936 | 16932 | aggtransfn1 ! 16937 | 16932 | aggtransfn2 ! 16938 | 16932 | aggfinalfn ! 16939 | 16932 | aggbasetype ! 16940 | 16932 | aggtranstype1 ! 16941 | 16932 | aggtranstype2 ! 16942 | 16932 | aggfinaltype ! 16943 | 16932 | agginitval1 ! 16944 | 16932 | agginitval2 ! 16945 | 16932 | ctid ! 16946 | 16932 | oid ! 16947 | 16932 | xmin ! 16948 | 16932 | cmin ! 16949 | 16932 | xmax ! 16950 | 16932 | cmax ! 16998 | 16996 | iplrelid ! 16999 | 16996 | iplipl ! 17000 | 16996 | iplseqno ! 17001 | 16996 | ctid ! 17002 | 16996 | oid ! 17003 | 16996 | xmin ! 17004 | 16996 | cmin ! 17005 | 16996 | xmax ! 17006 | 16996 | cmax ! 17009 | 17007 | inhproname ! 17010 | 17007 | inhargrelid ! 17011 | 17007 | inhdefrelid ! 17012 | 17007 | inhproc ! 17013 | 17007 | ctid ! 17014 | 17007 | oid ! 17015 | 17007 | xmin ! 17016 | 17007 | cmin ! 17017 | 17007 | xmax ! 17018 | 17007 | cmax ! 17021 | 17019 | rulename ! 17022 | 17019 | ev_type ! 17023 | 17019 | ev_class ! 17024 | 17019 | ev_attr ! 17025 | 17019 | is_instead ! 17026 | 17019 | ev_qual ! 17027 | 17019 | ev_action ! 17028 | 17019 | ctid ! 17029 | 17019 | oid ! 17030 | 17019 | xmin ! 17031 | 17019 | cmin ! 17032 | 17019 | xmax ! 17033 | 17019 | cmax ! 17036 | 17034 | relname ! 17037 | 17034 | listenerpid ! 17038 | 17034 | notification ! 17039 | 17034 | ctid ! 17040 | 17034 | oid ! 17041 | 17034 | xmin ! 17042 | 17034 | cmin ! 17043 | 17034 | xmax ! 17044 | 17034 | cmax ! 17047 | 17045 | objoid ! 17048 | 17045 | description ! 17049 | 17045 | ctid ! 17050 | 17045 | oid ! 17051 | 17045 | xmin ! 17052 | 17045 | cmin ! 17053 | 17045 | xmax ! 17054 | 17045 | cmax ! 17057 | 17055 | aggname ! 17057 | 17055 | aggbasetype ! 17060 | 17059 | amname ! 17063 | 17062 | amopclaid ! 17063 | 17062 | amopopr ! 17063 | 17062 | amopid ! 17066 | 17065 | amopid ! 17066 | 17065 | amopclaid ! 17066 | 17065 | amopstrategy ! 17069 | 17068 | adrelid ! 17072 | 17071 | attrelid ! 17072 | 17071 | attname ! 17075 | 17074 | attrelid ! 17075 | 17074 | attnum ! 17078 | 17077 | oid ! 17081 | 17080 | relname ! 17084 | 17083 | objoid ! 17087 | 17086 | groname ! 17090 | 17089 | grosysid ! 17093 | 17092 | indexrelid ! 17096 | 17095 | inhrelid ! 17096 | 17095 | inhseqno ! 17099 | 17098 | lanname ! 17102 | 17101 | oid ! 17105 | 17104 | relname ! 17105 | 17104 | listenerpid ! 17108 | 17107 | opcdeftype ! 17111 | 17110 | opcname ! 17114 | 17113 | oid ! 17117 | 17116 | oprname ! 17117 | 17116 | oprleft ! 17117 | 17116 | oprright ! 17117 | 17116 | oprkind ! 17121 | 17119 | oid ! 17124 | 17123 | proname ! 17124 | 17123 | pronargs ! 17124 | 17123 | proargtypes ! 17127 | 17126 | rcrelid ! 17130 | 17129 | oid ! 17133 | 17132 | rulename ! 17136 | 17135 | starelid ! 17136 | 17135 | staattnum ! 17139 | 17138 | tgconstrname ! 17142 | 17141 | tgconstrrelid ! 17145 | 17144 | tgrelid ! 17148 | 17147 | oid ! 17151 | 17150 | typname ! 17282 | 17280 | usename ! 17283 | 17280 | usesysid ! 17284 | 17280 | usecreatedb ! 17285 | 17280 | usetrace ! 17286 | 17280 | usesuper ! 17287 | 17280 | usecatupd ! 17288 | 17280 | passwd ! 17289 | 17280 | valuntil ! 17290 | 17280 | ctid ! 17291 | 17280 | oid ! 17292 | 17280 | xmin ! 17293 | 17280 | cmin ! 17294 | 17280 | xmax ! 17295 | 17280 | cmax ! 17314 | 17312 | tablename ! 17315 | 17312 | rulename ! 17316 | 17312 | definition ! 17317 | 17312 | ctid ! 17318 | 17312 | oid ! 17319 | 17312 | xmin ! 17320 | 17312 | cmin ! 17321 | 17312 | xmax ! 17322 | 17312 | cmax ! 17346 | 17344 | viewname ! 17347 | 17344 | viewowner ! 17348 | 17344 | definition ! 17349 | 17344 | ctid ! 17350 | 17344 | oid ! 17351 | 17344 | xmin ! 17352 | 17344 | cmin ! 17353 | 17344 | xmax ! 17354 | 17344 | cmax ! 17378 | 17376 | tablename ! 17379 | 17376 | tableowner ! 17380 | 17376 | hasindexes ! 17381 | 17376 | hasrules ! 17382 | 17376 | hastriggers ! 17383 | 17376 | ctid ! 17384 | 17376 | oid ! 17385 | 17376 | xmin ! 17386 | 17376 | cmin ! 17387 | 17376 | xmax ! 17388 | 17376 | cmax ! 17410 | 17408 | tablename ! 17411 | 17408 | indexname ! 17412 | 17408 | indexdef ! 17413 | 17408 | ctid ! 17414 | 17408 | oid ! 17415 | 17408 | xmin ! 17416 | 17408 | cmin ! 17417 | 17408 | xmax ! 17418 | 17408 | cmax ! 406563 | 406560 | ctid ! 406564 | 406560 | oid ! 406565 | 406560 | xmin ! 406566 | 406560 | cmin ! 406567 | 406560 | xmax ! 406568 | 406560 | cmax ! 406576 | 406573 | ctid ! 406577 | 406573 | oid ! 406578 | 406573 | xmin ! 406579 | 406573 | cmin ! 406580 | 406573 | xmax ! 406581 | 406573 | cmax ! 406595 | 406592 | ctid ! 406596 | 406592 | oid ! 406597 | 406592 | xmin ! 406598 | 406592 | cmin ! 406599 | 406592 | xmax ! 406600 | 406592 | cmax ! 406610 | 406608 | f1 ! 406611 | 406608 | ctid ! 406612 | 406608 | oid ! 406613 | 406608 | xmin ! 406614 | 406608 | cmin ! 406615 | 406608 | xmax ! 406616 | 406608 | cmax ! 406627 | 406624 | ctid ! 406628 | 406624 | oid ! 406629 | 406624 | xmin ! 406630 | 406624 | cmin ! 406631 | 406624 | xmax ! 406632 | 406624 | cmax ! 406659 | 406656 | ctid ! 406660 | 406656 | oid ! 406661 | 406656 | xmin ! 406662 | 406656 | cmin ! 406663 | 406656 | xmax ! 406664 | 406656 | cmax ! 406674 | 406672 | f1 ! 406675 | 406672 | ctid ! 406676 | 406672 | oid ! 406677 | 406672 | xmin ! 406678 | 406672 | cmin ! 406679 | 406672 | xmax ! 406680 | 406672 | cmax ! 406690 | 406688 | f1 ! 406691 | 406688 | ctid ! 406692 | 406688 | oid ! 406693 | 406688 | xmin ! 406694 | 406688 | cmin ! 406695 | 406688 | xmax ! 406696 | 406688 | cmax ! 406722 | 406720 | f1 ! 406723 | 406720 | ctid ! 406724 | 406720 | oid ! 406725 | 406720 | xmin ! 406726 | 406720 | cmin ! 406727 | 406720 | xmax ! 406728 | 406720 | cmax ! 406754 | 406752 | f1 ! 406755 | 406752 | ctid ! 406756 | 406752 | oid ! 406757 | 406752 | xmin ! 406758 | 406752 | cmin ! 406759 | 406752 | xmax ! 406760 | 406752 | cmax ! 406786 | 406784 | q1 ! 406787 | 406784 | q2 ! 406788 | 406784 | ctid ! 406789 | 406784 | oid ! 406790 | 406784 | xmin ! 406791 | 406784 | cmin ! 406792 | 406784 | xmax ! 406793 | 406784 | cmax ! 406819 | 406816 | ctid ! 406820 | 406816 | oid ! 406821 | 406816 | xmin ! 406822 | 406816 | cmin ! 406823 | 406816 | xmax ! 406824 | 406816 | cmax ! 406850 | 406848 | f1 ! 406851 | 406848 | ctid ! 406852 | 406848 | oid ! 406853 | 406848 | xmin ! 406854 | 406848 | cmin ! 406855 | 406848 | xmax ! 406856 | 406848 | cmax ! 406882 | 406880 | f1 ! 406883 | 406880 | ctid ! 406884 | 406880 | oid ! 406885 | 406880 | xmin ! 406886 | 406880 | cmin ! 406887 | 406880 | xmax ! 406888 | 406880 | cmax ! 406914 | 406912 | id ! 406915 | 406912 | val ! 406916 | 406912 | ctid ! 406917 | 406912 | oid ! 406918 | 406912 | xmin ! 406919 | 406912 | cmin ! 406920 | 406912 | xmax ! 406921 | 406912 | cmax ! 406924 | 406922 | id1 ! 406925 | 406922 | id2 ! 406926 | 406922 | expected ! 406927 | 406922 | ctid ! 406928 | 406922 | oid ! 406929 | 406922 | xmin ! 406930 | 406922 | cmin ! 406931 | 406922 | xmax ! 406932 | 406922 | cmax ! 406935 | 406933 | id1 ! 406936 | 406933 | id2 ! 406937 | 406933 | expected ! 406938 | 406933 | ctid ! 406939 | 406933 | oid ! 406940 | 406933 | xmin ! 406941 | 406933 | cmin ! 406942 | 406933 | xmax ! 406943 | 406933 | cmax ! 406947 | 406945 | id1 ! 406948 | 406945 | id2 ! 406949 | 406945 | expected ! 406950 | 406945 | ctid ! 406951 | 406945 | oid ! 406952 | 406945 | xmin ! 406953 | 406945 | cmin ! 406954 | 406945 | xmax ! 406955 | 406945 | cmax ! 406958 | 406956 | id1 ! 406959 | 406956 | id2 ! 406960 | 406956 | expected ! 406961 | 406956 | ctid ! 406962 | 406956 | oid ! 406963 | 406956 | xmin ! 406964 | 406956 | cmin ! 406965 | 406956 | xmax ! 406966 | 406956 | cmax ! 406969 | 406967 | id ! 406970 | 406967 | expected ! 406971 | 406967 | ctid ! 406972 | 406967 | oid ! 406973 | 406967 | xmin ! 406974 | 406967 | cmin ! 406975 | 406967 | xmax ! 406976 | 406967 | cmax ! 406979 | 406977 | id ! 406980 | 406977 | expected ! 406981 | 406977 | ctid ! 406982 | 406977 | oid ! 406983 | 406977 | xmin ! 406984 | 406977 | cmin ! 406985 | 406977 | xmax ! 406986 | 406977 | cmax ! 406989 | 406987 | id ! 406990 | 406987 | expected ! 406991 | 406987 | ctid ! 406992 | 406987 | oid ! 406993 | 406987 | xmin ! 406994 | 406987 | cmin ! 406995 | 406987 | xmax ! 406996 | 406987 | cmax ! 406999 | 406997 | id ! 407000 | 406997 | expected ! 407001 | 406997 | ctid ! 407002 | 406997 | oid ! 407003 | 406997 | xmin ! 407004 | 406997 | cmin ! 407005 | 406997 | xmax ! 407006 | 406997 | cmax ! 407009 | 407007 | id1 ! 407010 | 407007 | id2 ! 407011 | 407007 | result ! 407012 | 407007 | ctid ! 407013 | 407007 | oid ! 407014 | 407007 | xmin ! 407015 | 407007 | cmin ! 407016 | 407007 | xmax ! 407017 | 407007 | cmax ! 407469 | 407468 | id1 ! 407469 | 407468 | id2 ! 407472 | 407471 | id1 ! 407472 | 407471 | id2 ! 407475 | 407474 | id1 ! 407475 | 407474 | id2 ! 407478 | 407477 | id1 ! 407478 | 407477 | id2 ! 407481 | 407480 | id ! 407484 | 407483 | id ! 407487 | 407486 | id ! 407490 | 407489 | id ! 408310 | 408306 | ctid ! 408311 | 408306 | oid ! 408312 | 408306 | xmin ! 408313 | 408306 | cmin ! 408314 | 408306 | xmax ! 408315 | 408306 | cmax ! 408355 | 408352 | ctid ! 408356 | 408352 | oid ! 408357 | 408352 | xmin ! 408358 | 408352 | cmin ! 408359 | 408352 | xmax ! 408360 | 408352 | cmax ! 408374 | 408371 | ctid ! 408375 | 408371 | oid ! 408376 | 408371 | xmin ! 408377 | 408371 | cmin ! 408378 | 408371 | xmax ! 408379 | 408371 | cmax ! 408388 | 408385 | ctid ! 408389 | 408385 | oid ! 408390 | 408385 | xmin ! 408391 | 408385 | cmin ! 408392 | 408385 | xmax ! 408393 | 408385 | cmax ! 408399 | 408394 | ctid ! 408400 | 408394 | oid ! 408401 | 408394 | xmin ! 408402 | 408394 | cmin ! 408403 | 408394 | xmax ! 408404 | 408394 | cmax ! 408482 | 408480 | f1 ! 408483 | 408480 | ctid ! 408484 | 408480 | oid ! 408485 | 408480 | xmin ! 408486 | 408480 | cmin ! 408487 | 408480 | xmax ! 408488 | 408480 | cmax ! 408514 | 408512 | s ! 408515 | 408512 | ctid ! 408516 | 408512 | oid ! 408517 | 408512 | xmin ! 408518 | 408512 | cmin ! 408519 | 408512 | xmax ! 408520 | 408512 | cmax ! 408546 | 408544 | f1 ! 408547 | 408544 | ctid ! 408548 | 408544 | oid ! 408549 | 408544 | xmin ! 408550 | 408544 | cmin ! 408551 | 408544 | xmax ! 408552 | 408544 | cmax ! 408578 | 408576 | f1 ! 408579 | 408576 | ctid ! 408580 | 408576 | oid ! 408581 | 408576 | xmin ! 408582 | 408576 | cmin ! 408583 | 408576 | xmax ! 408584 | 408576 | cmax ! 408610 | 408608 | f1 ! 408611 | 408608 | ctid ! 408612 | 408608 | oid ! 408613 | 408608 | xmin ! 408614 | 408608 | cmin ! 408615 | 408608 | xmax ! 408616 | 408608 | cmax ! 408642 | 408640 | f1 ! 408643 | 408640 | ctid ! 408644 | 408640 | oid ! 408645 | 408640 | xmin ! 408646 | 408640 | cmin ! 408647 | 408640 | xmax ! 408648 | 408640 | cmax ! 408674 | 408672 | f1 ! 408675 | 408672 | ctid ! 408676 | 408672 | oid ! 408677 | 408672 | xmin ! 408678 | 408672 | cmin ! 408679 | 408672 | xmax ! 408680 | 408672 | cmax ! 408706 | 408704 | d1 ! 408707 | 408704 | ctid ! 408708 | 408704 | oid ! 408709 | 408704 | xmin ! 408710 | 408704 | cmin ! 408711 | 408704 | xmax ! 408712 | 408704 | cmax ! 408802 | 408800 | f1 ! 408803 | 408800 | ctid ! 408804 | 408800 | oid ! 408805 | 408800 | xmin ! 408806 | 408800 | cmin ! 408807 | 408800 | xmax ! 408808 | 408800 | cmax ! 408834 | 408832 | f1 ! 408835 | 408832 | ctid ! 408836 | 408832 | oid ! 408837 | 408832 | xmin ! 408838 | 408832 | cmin ! 408839 | 408832 | xmax ! 408840 | 408832 | cmax ! 408866 | 408864 | c ! 408867 | 408864 | i ! 408868 | 408864 | ctid ! 408869 | 408864 | oid ! 408870 | 408864 | xmin ! 408871 | 408864 | cmin ! 408872 | 408864 | xmax ! 408873 | 408864 | cmax ! (759 rows) -- Look for duplicate pg_attribute entries -- (This would not be necessary if the indexes on pg_attribute were UNIQUE?) *************** *** 143,160 **** WHERE p1.oid != p2.oid AND p1.attrelid = p2.attrelid AND (p1.attname = p2.attname OR p1.attnum = p2.attnum); ! oid | attname | oid | attname ! -----+---------+-----+--------- ! (0 rows) ! -- Cross-check attnum against parent relation SELECT p1.oid, p1.attname, p2.oid, p2.relname FROM pg_attribute AS p1, pg_class AS p2 WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts; ! oid | attname | oid | relname ! -----+---------+-----+--------- ! (0 rows) ! -- Detect missing pg_attribute entries: should have as many non-system -- attributes as parent relation expects SELECT p1.oid, p1.relname --- 947,958 ---- WHERE p1.oid != p2.oid AND p1.attrelid = p2.attrelid AND (p1.attname = p2.attname OR p1.attnum = p2.attnum); ! ERROR: get_attdisbursion: no attribute tuple 1249 -2 -- Cross-check attnum against parent relation SELECT p1.oid, p1.attname, p2.oid, p2.relname FROM pg_attribute AS p1, pg_class AS p2 WHERE p1.attrelid = p2.oid AND p1.attnum > p2.relnatts; ! ERROR: getattproperties: no attribute tuple 1259 -2 -- Detect missing pg_attribute entries: should have as many non-system -- attributes as parent relation expects SELECT p1.oid, p1.relname *************** *** 172,178 **** (p1.attlen != p2.typlen OR p1.attalign != p2.typalign OR p1.attbyval != p2.typbyval); ! oid | attname | oid | typname ! -----+---------+-----+--------- ! (0 rows) ! --- 970,973 ---- (p1.attlen != p2.typlen OR p1.attalign != p2.typalign OR p1.attbyval != p2.typbyval); ! ERROR: getattproperties: no attribute tuple 1247 -2 ---------------------- *** expected/opr_sanity.out Sat Jan 22 15:51:20 2000 --- results/opr_sanity.out Thu Dec 28 18:05:47 2000 *************** *** 42,51 **** p1.proname = p2.proname AND p1.pronargs = p2.pronargs AND p1.proargtypes = p2.proargtypes; ! oid | proname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Considering only built-in procs (prolang = 11), look for multiple uses -- of the same internal function (ie, matching prosrc fields). It's OK to -- have several entries with different pronames for the same internal function, --- 42,48 ---- p1.proname = p2.proname AND p1.pronargs = p2.pronargs AND p1.proargtypes = p2.proargtypes; ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 -- Considering only built-in procs (prolang = 11), look for multiple uses -- of the same internal function (ie, matching prosrc fields). It's OK to -- have several entries with different pronames for the same internal function, *************** *** 60,69 **** p1.proiscachable != p2.proiscachable OR p1.pronargs != p2.pronargs OR p1.proretset != p2.proretset); ! oid | proname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Look for uses of different type OIDs in the argument/result type fields -- for different aliases of the same built-in function. -- This indicates that the types are being presumed to be binary-equivalent. --- 57,63 ---- p1.proiscachable != p2.proiscachable OR p1.pronargs != p2.pronargs OR p1.proretset != p2.proretset); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 -- Look for uses of different type OIDs in the argument/result type fields -- for different aliases of the same built-in function. -- This indicates that the types are being presumed to be binary-equivalent. *************** *** 75,160 **** WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.prorettype < p2.prorettype); ! prorettype | prorettype ! ------------+------------ ! 18 | 25 ! 25 | 1043 ! (2 rows) ! SELECT DISTINCT p1.proargtypes[0], p2.proargtypes[0] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[0] < p2.proargtypes[0]); ! proargtypes | proargtypes ! -------------+------------- ! 25 | 1043 ! 1042 | 1043 ! (2 rows) ! SELECT DISTINCT p1.proargtypes[1], p2.proargtypes[1] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[1] < p2.proargtypes[1]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[2], p2.proargtypes[2] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[2] < p2.proargtypes[2]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[3], p2.proargtypes[3] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[3] < p2.proargtypes[3]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[4], p2.proargtypes[4] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[4] < p2.proargtypes[4]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[5], p2.proargtypes[5] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[5] < p2.proargtypes[5]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[6], p2.proargtypes[6] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[6] < p2.proargtypes[6]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! SELECT DISTINCT p1.proargtypes[7], p2.proargtypes[7] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[7] < p2.proargtypes[7]); ! proargtypes | proargtypes ! -------------+------------- ! (0 rows) ! -- **************** pg_operator **************** -- Look for illegal values in pg_operator fields. SELECT p1.oid, p1.oprname --- 69,123 ---- WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.prorettype < p2.prorettype); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[0], p2.proargtypes[0] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[0] < p2.proargtypes[0]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[1], p2.proargtypes[1] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[1] < p2.proargtypes[1]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[2], p2.proargtypes[2] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[2] < p2.proargtypes[2]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[3], p2.proargtypes[3] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[3] < p2.proargtypes[3]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[4], p2.proargtypes[4] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[4] < p2.proargtypes[4]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[5], p2.proargtypes[5] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[5] < p2.proargtypes[5]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[6], p2.proargtypes[6] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[6] < p2.proargtypes[6]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 SELECT DISTINCT p1.proargtypes[7], p2.proargtypes[7] FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 11 AND p2.prolang = 11 AND (p1.proargtypes[7] < p2.proargtypes[7]); ! ERROR: get_attdisbursion: no attribute tuple 1255 -2 -- **************** pg_operator **************** -- Look for illegal values in pg_operator fields. SELECT p1.oid, p1.oprname *************** *** 184,193 **** p1.oprkind = p2.oprkind AND p1.oprleft = p2.oprleft AND p1.oprright = p2.oprright; ! oid | oprcode | oid | oprcode ! -----+---------+-----+--------- ! (0 rows) ! -- Look for commutative operators that don't commute. -- DEFINITIONAL NOTE: If A.oprcom = B, then x A y has the same result as y B x. -- We expect that B will always say that B.oprcom = A as well; that's not --- 147,153 ---- p1.oprkind = p2.oprkind AND p1.oprleft = p2.oprleft AND p1.oprright = p2.oprright; ! ERROR: get_attdisbursion: no attribute tuple 16597 -2 -- Look for commutative operators that don't commute. -- DEFINITIONAL NOTE: If A.oprcom = B, then x A y has the same result as y B x. -- We expect that B will always say that B.oprcom = A as well; that's not *************** *** 200,209 **** p1.oprright != p2.oprleft OR p1.oprresult != p2.oprresult OR p1.oid != p2.oprcom); ! oid | oprcode | oid | oprcode ! -----+---------+-----+--------- ! (0 rows) ! -- Look for negatory operators that don't agree. -- DEFINITIONAL NOTE: If A.oprnegate = B, then both A and B must yield -- boolean results, and (x A y) == ! (x B y), or the equivalent for --- 160,166 ---- p1.oprright != p2.oprleft OR p1.oprresult != p2.oprresult OR p1.oid != p2.oprcom); ! ERROR: getattproperties: no attribute tuple 16597 -2 -- Look for negatory operators that don't agree. -- DEFINITIONAL NOTE: If A.oprnegate = B, then both A and B must yield -- boolean results, and (x A y) == ! (x B y), or the equivalent for *************** *** 219,228 **** p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oid != p2.oprnegate); ! oid | oprcode | oid | oprcode ! -----+---------+-----+--------- ! (0 rows) ! -- Look for mergejoin operators that don't match their links. -- A mergejoin link leads from an '=' operator to the -- sort operator ('<' operator) that's appropriate for --- 176,182 ---- p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oid != p2.oprnegate); ! ERROR: getattproperties: no attribute tuple 16597 -2 -- Look for mergejoin operators that don't match their links. -- A mergejoin link leads from an '=' operator to the -- sort operator ('<' operator) that's appropriate for *************** *** 237,246 **** p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oprrsortop = 0); ! oid | oprcode | oid | oprcode ! -----+---------+-----+--------- ! (0 rows) ! SELECT p1.oid, p1.oprcode, p2.oid, p2.oprcode FROM pg_operator AS p1, pg_operator AS p2 WHERE p1.oprrsortop = p2.oid AND --- 191,197 ---- p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oprrsortop = 0); ! ERROR: getattproperties: no attribute tuple 16597 -2 SELECT p1.oid, p1.oprcode, p2.oid, p2.oprcode FROM pg_operator AS p1, pg_operator AS p2 WHERE p1.oprrsortop = p2.oid AND *************** *** 251,260 **** p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oprlsortop = 0); ! oid | oprcode | oid | oprcode ! -----+---------+-----+--------- ! (0 rows) ! -- A mergejoinable = operator must have a commutator (usually itself) -- as well as corresponding < and > operators. Note that the "corresponding" -- operators have the same L and R input datatypes as the = operator, --- 202,208 ---- p1.oprresult != 16 OR p2.oprresult != 16 OR p1.oprlsortop = 0); ! ERROR: getattproperties: no attribute tuple 16597 -2 -- A mergejoinable = operator must have a commutator (usually itself) -- as well as corresponding < and > operators. Note that the "corresponding" -- operators have the same L and R input datatypes as the = operator, *************** *** 326,335 **** SELECT p1.oid, p1.oprname FROM pg_operator AS p1, pg_proc AS p2 WHERE p1.oprcanhash AND p1.oprcode = p2.oid AND p2.proname = 'array_eq'; ! oid | oprname ! -----+--------- ! (0 rows) ! -- Check that each operator defined in pg_operator matches its oprcode entry -- in pg_proc. Easiest to do this separately for each oprkind. -- FIXME: want to check that argument/result types match, but how to do that --- 274,280 ---- SELECT p1.oid, p1.oprname FROM pg_operator AS p1, pg_proc AS p2 WHERE p1.oprcanhash AND p1.oprcode = p2.oid AND p2.proname = 'array_eq'; ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Check that each operator defined in pg_operator matches its oprcode entry -- in pg_proc. Easiest to do this separately for each oprkind. -- FIXME: want to check that argument/result types match, but how to do that *************** *** 345,354 **** -- (p1.oprleft != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR -- (p1.oprright != p2.proargtypes[1] AND p2.proargtypes[1] != 0) ); ! oid | oprname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- These two selects can be left as-is because there are no binary-compatible -- cases that they trip over, at least in 6.5: SELECT p1.oid, p1.oprname, p2.oid, p2.proname --- 290,296 ---- -- (p1.oprleft != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR -- (p1.oprright != p2.proargtypes[1] AND p2.proargtypes[1] != 0) ); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- These two selects can be left as-is because there are no binary-compatible -- cases that they trip over, at least in 6.5: SELECT p1.oid, p1.oprname, p2.oid, p2.proname *************** *** 359,368 **** p1.oprresult != p2.prorettype OR (p1.oprright != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR p1.oprleft != 0); ! oid | oprname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! SELECT p1.oid, p1.oprname, p2.oid, p2.proname FROM pg_operator AS p1, pg_proc AS p2 WHERE p1.oprcode = p2.oid AND --- 301,307 ---- p1.oprresult != p2.prorettype OR (p1.oprright != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR p1.oprleft != 0); ! ERROR: getattproperties: no attribute tuple 1255 -2 SELECT p1.oid, p1.oprname, p2.oid, p2.proname FROM pg_operator AS p1, pg_proc AS p2 WHERE p1.oprcode = p2.oid AND *************** *** 371,380 **** p1.oprresult != p2.prorettype OR (p1.oprleft != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR p1.oprright != 0); ! oid | oprname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- If oprrest is set, the operator must return boolean, -- and it must link to a proc with the right signature -- to be a restriction selectivity estimator. --- 310,316 ---- p1.oprresult != p2.prorettype OR (p1.oprleft != p2.proargtypes[0] AND p2.proargtypes[0] != 0) OR p1.oprright != 0); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- If oprrest is set, the operator must return boolean, -- and it must link to a proc with the right signature -- to be a restriction selectivity estimator. *************** *** 388,397 **** p2.proargtypes[0] != 26 OR p2.proargtypes[1] != 26 OR p2.proargtypes[2] != 21 OR p2.proargtypes[3] != 0 OR p2.proargtypes[4] != 23); ! oid | oprname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- If oprjoin is set, the operator must be a binary boolean op, -- and it must link to a proc with the right signature -- to be a join selectivity estimator. --- 324,330 ---- p2.proargtypes[0] != 26 OR p2.proargtypes[1] != 26 OR p2.proargtypes[2] != 21 OR p2.proargtypes[3] != 0 OR p2.proargtypes[4] != 23); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- If oprjoin is set, the operator must be a binary boolean op, -- and it must link to a proc with the right signature -- to be a join selectivity estimator. *************** *** 405,414 **** p2.proargtypes[0] != 26 OR p2.proargtypes[1] != 26 OR p2.proargtypes[2] != 21 OR p2.proargtypes[3] != 26 OR p2.proargtypes[4] != 21); ! oid | oprname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- **************** pg_aggregate **************** -- Look for illegal values in pg_aggregate fields. -- aggbasetype can only be 0 if transfn1 is not present (eg, count(*)) --- 338,344 ---- p2.proargtypes[0] != 26 OR p2.proargtypes[1] != 26 OR p2.proargtypes[2] != 21 OR p2.proargtypes[3] != 26 OR p2.proargtypes[4] != 21); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- **************** pg_aggregate **************** -- Look for illegal values in pg_aggregate fields. -- aggbasetype can only be 0 if transfn1 is not present (eg, count(*)) *************** *** 473,482 **** -- p1.aggtranstype1 != p2.proargtypes[0] OR -- p1.aggbasetype != p2.proargtypes[1] ); ! oid | aggname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Cross-check transfn2 (if present) against its entry in pg_proc. -- FIXME: what about binary-compatible types? SELECT p1.oid, p1.aggname, p2.oid, p2.proname --- 403,409 ---- -- p1.aggtranstype1 != p2.proargtypes[0] OR -- p1.aggbasetype != p2.proargtypes[1] ); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Cross-check transfn2 (if present) against its entry in pg_proc. -- FIXME: what about binary-compatible types? SELECT p1.oid, p1.aggname, p2.oid, p2.proname *************** *** 485,494 **** (p2.proretset OR p1.aggtranstype2 != p2.prorettype OR p2.pronargs != 1 OR p1.aggtranstype2 != p2.proargtypes[0]); ! oid | aggname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- Cross-check finalfn (if present) against its entry in pg_proc. -- FIXME: what about binary-compatible types? SELECT p1.oid, p1.aggname, p2.oid, p2.proname --- 412,418 ---- (p2.proretset OR p1.aggtranstype2 != p2.prorettype OR p2.pronargs != 1 OR p1.aggtranstype2 != p2.proargtypes[0]); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- Cross-check finalfn (if present) against its entry in pg_proc. -- FIXME: what about binary-compatible types? SELECT p1.oid, p1.aggname, p2.oid, p2.proname *************** *** 498,507 **** p2.pronargs != 2 OR p1.aggtranstype1 != p2.proargtypes[0] OR p1.aggtranstype2 != p2.proargtypes[1]); ! oid | aggname | oid | proname ! -----+---------+-----+--------- ! (0 rows) ! -- **************** pg_amop **************** -- Look for illegal values in pg_amop fields SELECT p1.oid --- 422,428 ---- p2.pronargs != 2 OR p1.aggtranstype1 != p2.proargtypes[0] OR p1.aggtranstype2 != p2.proargtypes[1]); ! ERROR: getattproperties: no attribute tuple 1255 -2 -- **************** pg_amop **************** -- Look for illegal values in pg_amop fields SELECT p1.oid *************** *** 519,536 **** p1.amopid = p2.amopid AND p1.amopclaid = p2.amopclaid AND p1.amopstrategy = p2.amopstrategy; ! oid | oid ! -----+----- ! (0 rows) ! -- Cross-check amopstrategy index against parent AM SELECT p1.oid, p2.oid, p2.amname FROM pg_amop AS p1, pg_am AS p2 WHERE p1.amopid = p2.oid AND p1.amopstrategy > p2.amstrategies; ! oid | oid | amname ! -----+-----+-------- ! (0 rows) ! -- Detect missing pg_amop entries: should have as many strategy functions -- as AM expects for each opclass, unless there are none at all -- (some opclasses only offer support for a limited set of AMs...) --- 440,451 ---- p1.amopid = p2.amopid AND p1.amopclaid = p2.amopclaid AND p1.amopstrategy = p2.amopstrategy; ! ERROR: get_attdisbursion: no attribute tuple 16662 -2 -- Cross-check amopstrategy index against parent AM SELECT p1.oid, p2.oid, p2.amname FROM pg_amop AS p1, pg_am AS p2 WHERE p1.amopid = p2.oid AND p1.amopstrategy > p2.amstrategies; ! ERROR: get_attdisbursion: no attribute tuple 16631 -2 -- Detect missing pg_amop entries: should have as many strategy functions -- as AM expects for each opclass, unless there are none at all -- (some opclasses only offer support for a limited set of AMs...) *************** *** 549,568 **** FROM pg_amop AS p1, pg_operator AS p2 WHERE p1.amopopr = p2.oid AND (p2.oprkind != 'b' OR p2.oprresult != 16); ! oid | oid | oprname ! -----+-----+--------- ! (0 rows) ! -- If opclass is for a specific type, operator inputs should be of that type SELECT p1.oid, p2.oid, p2.oprname, p3.oid, p3.opcname FROM pg_amop AS p1, pg_operator AS p2, pg_opclass AS p3 WHERE p1.amopopr = p2.oid AND p1.amopclaid = p3.oid AND p3.opcdeftype != 0 AND (p3.opcdeftype != p2.oprleft OR p3.opcdeftype != p2.oprright); ! oid | oid | oprname | oid | opcname ! -----+-----+---------+-----+--------- ! (0 rows) ! -- **************** pg_amproc **************** -- Look for illegal values in pg_amproc fields SELECT p1.oid --- 464,477 ---- FROM pg_amop AS p1, pg_operator AS p2 WHERE p1.amopopr = p2.oid AND (p2.oprkind != 'b' OR p2.oprresult != 16); ! ERROR: getattproperties: no attribute tuple 16597 -2 -- If opclass is for a specific type, operator inputs should be of that type SELECT p1.oid, p2.oid, p2.oprname, p3.oid, p3.opcname FROM pg_amop AS p1, pg_operator AS p2, pg_opclass AS p3 WHERE p1.amopopr = p2.oid AND p1.amopclaid = p3.oid AND p3.opcdeftype != 0 AND (p3.opcdeftype != p2.oprleft OR p3.opcdeftype != p2.oprright); ! ERROR: getattproperties: no attribute tuple 16597 -2 -- **************** pg_amproc **************** -- Look for illegal values in pg_amproc fields SELECT p1.oid *************** *** 580,597 **** p1.amid = p2.amid AND p1.amopclaid = p2.amopclaid AND p1.amprocnum = p2.amprocnum; ! oid | oid ! -----+----- ! (0 rows) ! -- Cross-check amprocnum index against parent AM SELECT p1.oid, p2.oid, p2.amname FROM pg_amproc AS p1, pg_am AS p2 WHERE p1.amid = p2.oid AND p1.amprocnum > p2.amsupport; ! oid | oid | amname ! -----+-----+-------- ! (0 rows) ! -- Detect missing pg_amproc entries: should have as many support functions -- as AM expects for each opclass, unless there are none at all -- (some opclasses only offer support for a limited set of AMs...) --- 489,500 ---- p1.amid = p2.amid AND p1.amopclaid = p2.amopclaid AND p1.amprocnum = p2.amprocnum; ! ERROR: get_attdisbursion: no attribute tuple 16856 -2 -- Cross-check amprocnum index against parent AM SELECT p1.oid, p2.oid, p2.amname FROM pg_amproc AS p1, pg_am AS p2 WHERE p1.amid = p2.oid AND p1.amprocnum > p2.amsupport; ! ERROR: get_attdisbursion: no attribute tuple 16631 -2 -- Detect missing pg_amproc entries: should have as many support functions -- as AM expects for each opclass, unless there are none at all -- (some opclasses only offer support for a limited set of AMs...) *************** *** 616,622 **** p1.amid = p3.amid AND p1.amprocnum = p3.amprocnum AND p1.amproc = p2.oid AND p3.amproc = p4.oid AND (p2.proretset OR p4.proretset OR p2.pronargs != p4.pronargs); ! oid | oid | proname | oid | oid | proname ! -----+-----+---------+-----+-----+--------- ! (0 rows) ! --- 519,522 ---- p1.amid = p3.amid AND p1.amprocnum = p3.amprocnum AND p1.amproc = p2.oid AND p3.amproc = p4.oid AND (p2.proretset OR p4.proretset OR p2.pronargs != p4.pronargs); ! ERROR: getattproperties: no attribute tuple 1255 -2 ---------------------- *** expected/horology.out Mon Mar 20 21:59:14 2000 --- results/horology.out Thu Dec 28 18:05:51 2000 *************** *** 771,794 **** SELECT '' AS five, d1 AS timestamp, abstime(d1) AS abstime FROM TIMESTAMP_TBL WHERE NOT isfinite(d1); ! five | timestamp | abstime ! ------+-----------+----------- ! | invalid | invalid ! | -infinity | -infinity ! | infinity | infinity ! | invalid | invalid ! | invalid | invalid ! (5 rows) ! SELECT '' AS three, f1 as abstime, timestamp(f1) AS timestamp FROM ABSTIME_TBL WHERE NOT isfinite(f1); ! three | abstime | timestamp ! -------+-----------+----------- ! | infinity | infinity ! | -infinity | -infinity ! | invalid | invalid ! (3 rows) ! SELECT '' AS ten, f1 AS interval, reltime( f1) AS reltime FROM INTERVAL_TBL; ten | interval | reltime --- 771,780 ---- SELECT '' AS five, d1 AS timestamp, abstime(d1) AS abstime FROM TIMESTAMP_TBL WHERE NOT isfinite(d1); ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS three, f1 as abstime, timestamp(f1) AS timestamp FROM ABSTIME_TBL WHERE NOT isfinite(f1); ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS ten, f1 AS interval, reltime( f1) AS reltime FROM INTERVAL_TBL; ten | interval | reltime *************** *** 825,900 **** SHOW DateStyle; NOTICE: DateStyle is Postgres with US (NonEuropean) conventions SELECT '' AS "66", d1 AS us_postgres FROM TIMESTAMP_TBL; ! 66 | us_postgres ! ----+--------------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | Mon Feb 10 17:32:01 1997 PST ! | invalid ! | invalid ! | Mon Feb 10 17:32:01.00 1997 PST ! | Mon Feb 10 17:32:02.00 1997 PST ! | Mon Feb 10 17:32:01.40 1997 PST ! | Mon Feb 10 17:32:01.50 1997 PST ! | Mon Feb 10 17:32:01.60 1997 PST ! | Thu Jan 02 00:00:00 1997 PST ! | Thu Jan 02 03:04:05 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Tue Jun 10 17:32:01 1997 PDT ! | Wed Mar 15 08:14:01 2000 PST ! | Wed Mar 15 04:14:02 2000 PST ! | Wed Mar 15 02:14:03 2000 PST ! | Wed Mar 15 03:14:04 2000 PST ! | Wed Mar 15 01:14:05 2000 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:00 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 17:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Mon Feb 10 09:32:01 1997 PST ! | Tue Jun 10 18:32:01 1997 PDT ! | Mon Feb 10 17:32:01 1997 PST ! | Tue Feb 11 17:32:01 1997 PST ! | Wed Feb 12 17:32:01 1997 PST ! | Thu Feb 13 17:32:01 1997 PST ! | Fri Feb 14 17:32:01 1997 PST ! | Sat Feb 15 17:32:01 1997 PST ! | Sun Feb 16 17:32:01 1997 PST ! | Tue Feb 16 17:32 0097 BC ! | Sat Feb 16 17:32:01 0097 ! | Thu Feb 16 17:32:01 0597 ! | Tue Feb 16 17:32:01 1097 ! | Sat Feb 16 17:32:01 1697 ! | Thu Feb 16 17:32:01 1797 ! | Tue Feb 16 17:32:01 1897 ! | Sun Feb 16 17:32:01 1997 PST ! | Sat Feb 16 17:32:01 2097 ! | Wed Feb 28 17:32:01 1996 PST ! | Thu Feb 29 17:32:01 1996 PST ! | Fri Mar 01 17:32:01 1996 PST ! | Mon Dec 30 17:32:01 1996 PST ! | Tue Dec 31 17:32:01 1996 PST ! | Wed Jan 01 17:32:01 1997 PST ! | Fri Feb 28 17:32:01 1997 PST ! | Sat Mar 01 17:32:01 1997 PST ! | Tue Dec 30 17:32:01 1997 PST ! | Wed Dec 31 17:32:01 1997 PST ! | Fri Dec 31 17:32:01 1999 PST ! | Sat Jan 01 17:32:01 2000 PST ! | Sun Dec 31 17:32:01 2000 PST ! | Mon Jan 01 17:32:01 2001 PST ! (66 rows) ! SELECT '' AS eight, f1 AS us_postgres FROM ABSTIME_TBL; eight | us_postgres -------+------------------------------ --- 811,817 ---- SHOW DateStyle; NOTICE: DateStyle is Postgres with US (NonEuropean) conventions SELECT '' AS "66", d1 AS us_postgres FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS us_postgres FROM ABSTIME_TBL; eight | us_postgres -------+------------------------------ *************** *** 910,985 **** SET DateStyle TO 'US,ISO'; SELECT '' AS "66", d1 AS us_iso FROM TIMESTAMP_TBL; ! 66 | us_iso ! ----+--------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | 1997-02-10 17:32:01-08 ! | invalid ! | invalid ! | 1997-02-10 17:32:01.00-08 ! | 1997-02-10 17:32:02.00-08 ! | 1997-02-10 17:32:01.40-08 ! | 1997-02-10 17:32:01.50-08 ! | 1997-02-10 17:32:01.60-08 ! | 1997-01-02 00:00:00-08 ! | 1997-01-02 03:04:05-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-06-10 17:32:01-07 ! | 2000-03-15 08:14:01-08 ! | 2000-03-15 04:14:02-08 ! | 2000-03-15 02:14:03-08 ! | 2000-03-15 03:14:04-08 ! | 2000-03-15 01:14:05-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:00-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-06-10 18:32:01-07 ! | 1997-02-10 17:32:01-08 ! | 1997-02-11 17:32:01-08 ! | 1997-02-12 17:32:01-08 ! | 1997-02-13 17:32:01-08 ! | 1997-02-14 17:32:01-08 ! | 1997-02-15 17:32:01-08 ! | 1997-02-16 17:32:01-08 ! | 0097-02-16 17:32 BC ! | 0097-02-16 17:32:01 ! | 0597-02-16 17:32:01 ! | 1097-02-16 17:32:01 ! | 1697-02-16 17:32:01 ! | 1797-02-16 17:32:01 ! | 1897-02-16 17:32:01 ! | 1997-02-16 17:32:01-08 ! | 2097-02-16 17:32:01 ! | 1996-02-28 17:32:01-08 ! | 1996-02-29 17:32:01-08 ! | 1996-03-01 17:32:01-08 ! | 1996-12-30 17:32:01-08 ! | 1996-12-31 17:32:01-08 ! | 1997-01-01 17:32:01-08 ! | 1997-02-28 17:32:01-08 ! | 1997-03-01 17:32:01-08 ! | 1997-12-30 17:32:01-08 ! | 1997-12-31 17:32:01-08 ! | 1999-12-31 17:32:01-08 ! | 2000-01-01 17:32:01-08 ! | 2000-12-31 17:32:01-08 ! | 2001-01-01 17:32:01-08 ! (66 rows) ! SELECT '' AS eight, f1 AS us_iso FROM ABSTIME_TBL; eight | us_iso -------+------------------------ --- 827,833 ---- SET DateStyle TO 'US,ISO'; SELECT '' AS "66", d1 AS us_iso FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS us_iso FROM ABSTIME_TBL; eight | us_iso -------+------------------------ *************** *** 997,1072 **** SHOW DateStyle; NOTICE: DateStyle is SQL with US (NonEuropean) conventions SELECT '' AS "66", d1 AS us_sql FROM TIMESTAMP_TBL; ! 66 | us_sql ! ----+---------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | 02/10/1997 17:32:01.00 PST ! | invalid ! | invalid ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:02.00 PST ! | 02/10/1997 17:32:01.40 PST ! | 02/10/1997 17:32:01.50 PST ! | 02/10/1997 17:32:01.60 PST ! | 01/02/1997 00:00:00.00 PST ! | 01/02/1997 03:04:05.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 06/10/1997 17:32:01.00 PDT ! | 03/15/2000 08:14:01.00 PST ! | 03/15/2000 04:14:02.00 PST ! | 03/15/2000 02:14:03.00 PST ! | 03/15/2000 03:14:04.00 PST ! | 03/15/2000 01:14:05.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:00.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 17:32:01.00 PST ! | 02/10/1997 09:32:01.00 PST ! | 02/10/1997 09:32:01.00 PST ! | 02/10/1997 09:32:01.00 PST ! | 06/10/1997 18:32:01.00 PDT ! | 02/10/1997 17:32:01.00 PST ! | 02/11/1997 17:32:01.00 PST ! | 02/12/1997 17:32:01.00 PST ! | 02/13/1997 17:32:01.00 PST ! | 02/14/1997 17:32:01.00 PST ! | 02/15/1997 17:32:01.00 PST ! | 02/16/1997 17:32:01.00 PST ! | 02/16/0097 17:32 BC ! | 02/16/0097 17:32:01.00 ! | 02/16/0597 17:32:01.00 ! | 02/16/1097 17:32:01.00 ! | 02/16/1697 17:32:01.00 ! | 02/16/1797 17:32:01.00 ! | 02/16/1897 17:32:01.00 ! | 02/16/1997 17:32:01.00 PST ! | 02/16/2097 17:32:01.00 ! | 02/28/1996 17:32:01.00 PST ! | 02/29/1996 17:32:01.00 PST ! | 03/01/1996 17:32:01.00 PST ! | 12/30/1996 17:32:01.00 PST ! | 12/31/1996 17:32:01.00 PST ! | 01/01/1997 17:32:01.00 PST ! | 02/28/1997 17:32:01.00 PST ! | 03/01/1997 17:32:01.00 PST ! | 12/30/1997 17:32:01.00 PST ! | 12/31/1997 17:32:01.00 PST ! | 12/31/1999 17:32:01.00 PST ! | 01/01/2000 17:32:01.00 PST ! | 12/31/2000 17:32:01.00 PST ! | 01/01/2001 17:32:01.00 PST ! (66 rows) ! SELECT '' AS eight, f1 AS us_sql FROM ABSTIME_TBL; eight | us_sql -------+---------------------------- --- 845,851 ---- SHOW DateStyle; NOTICE: DateStyle is SQL with US (NonEuropean) conventions SELECT '' AS "66", d1 AS us_sql FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS us_sql FROM ABSTIME_TBL; eight | us_sql -------+---------------------------- *************** *** 1091,1167 **** (1 row) SELECT '' AS "67", d1 AS european_postgres FROM TIMESTAMP_TBL; ! 67 | european_postgres ! ----+--------------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | Mon 10 Feb 17:32:01 1997 PST ! | invalid ! | invalid ! | Mon 10 Feb 17:32:01.00 1997 PST ! | Mon 10 Feb 17:32:02.00 1997 PST ! | Mon 10 Feb 17:32:01.40 1997 PST ! | Mon 10 Feb 17:32:01.50 1997 PST ! | Mon 10 Feb 17:32:01.60 1997 PST ! | Thu 02 Jan 00:00:00 1997 PST ! | Thu 02 Jan 03:04:05 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Tue 10 Jun 17:32:01 1997 PDT ! | Wed 15 Mar 08:14:01 2000 PST ! | Wed 15 Mar 04:14:02 2000 PST ! | Wed 15 Mar 02:14:03 2000 PST ! | Wed 15 Mar 03:14:04 2000 PST ! | Wed 15 Mar 01:14:05 2000 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:00 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 17:32:01 1997 PST ! | Mon 10 Feb 09:32:01 1997 PST ! | Mon 10 Feb 09:32:01 1997 PST ! | Mon 10 Feb 09:32:01 1997 PST ! | Tue 10 Jun 18:32:01 1997 PDT ! | Mon 10 Feb 17:32:01 1997 PST ! | Tue 11 Feb 17:32:01 1997 PST ! | Wed 12 Feb 17:32:01 1997 PST ! | Thu 13 Feb 17:32:01 1997 PST ! | Fri 14 Feb 17:32:01 1997 PST ! | Sat 15 Feb 17:32:01 1997 PST ! | Sun 16 Feb 17:32:01 1997 PST ! | Tue 16 Feb 17:32 0097 BC ! | Sat 16 Feb 17:32:01 0097 ! | Thu 16 Feb 17:32:01 0597 ! | Tue 16 Feb 17:32:01 1097 ! | Sat 16 Feb 17:32:01 1697 ! | Thu 16 Feb 17:32:01 1797 ! | Tue 16 Feb 17:32:01 1897 ! | Sun 16 Feb 17:32:01 1997 PST ! | Sat 16 Feb 17:32:01 2097 ! | Wed 28 Feb 17:32:01 1996 PST ! | Thu 29 Feb 17:32:01 1996 PST ! | Fri 01 Mar 17:32:01 1996 PST ! | Mon 30 Dec 17:32:01 1996 PST ! | Tue 31 Dec 17:32:01 1996 PST ! | Wed 01 Jan 17:32:01 1997 PST ! | Fri 28 Feb 17:32:01 1997 PST ! | Sat 01 Mar 17:32:01 1997 PST ! | Tue 30 Dec 17:32:01 1997 PST ! | Wed 31 Dec 17:32:01 1997 PST ! | Fri 31 Dec 17:32:01 1999 PST ! | Sat 01 Jan 17:32:01 2000 PST ! | Sun 31 Dec 17:32:01 2000 PST ! | Mon 01 Jan 17:32:01 2001 PST ! | Thu 13 Jun 00:00:00 1957 PDT ! (67 rows) ! SELECT '' AS eight, f1 AS european_postgres FROM ABSTIME_TBL; eight | european_postgres -------+------------------------------ --- 870,876 ---- (1 row) SELECT '' AS "67", d1 AS european_postgres FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS european_postgres FROM ABSTIME_TBL; eight | european_postgres -------+------------------------------ *************** *** 1179,1255 **** SHOW DateStyle; NOTICE: DateStyle is ISO with European conventions SELECT '' AS "67", d1 AS european_iso FROM TIMESTAMP_TBL; ! 67 | european_iso ! ----+--------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | 1997-02-10 17:32:01-08 ! | invalid ! | invalid ! | 1997-02-10 17:32:01.00-08 ! | 1997-02-10 17:32:02.00-08 ! | 1997-02-10 17:32:01.40-08 ! | 1997-02-10 17:32:01.50-08 ! | 1997-02-10 17:32:01.60-08 ! | 1997-01-02 00:00:00-08 ! | 1997-01-02 03:04:05-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-06-10 17:32:01-07 ! | 2000-03-15 08:14:01-08 ! | 2000-03-15 04:14:02-08 ! | 2000-03-15 02:14:03-08 ! | 2000-03-15 03:14:04-08 ! | 2000-03-15 01:14:05-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:00-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 17:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-02-10 09:32:01-08 ! | 1997-06-10 18:32:01-07 ! | 1997-02-10 17:32:01-08 ! | 1997-02-11 17:32:01-08 ! | 1997-02-12 17:32:01-08 ! | 1997-02-13 17:32:01-08 ! | 1997-02-14 17:32:01-08 ! | 1997-02-15 17:32:01-08 ! | 1997-02-16 17:32:01-08 ! | 0097-02-16 17:32 BC ! | 0097-02-16 17:32:01 ! | 0597-02-16 17:32:01 ! | 1097-02-16 17:32:01 ! | 1697-02-16 17:32:01 ! | 1797-02-16 17:32:01 ! | 1897-02-16 17:32:01 ! | 1997-02-16 17:32:01-08 ! | 2097-02-16 17:32:01 ! | 1996-02-28 17:32:01-08 ! | 1996-02-29 17:32:01-08 ! | 1996-03-01 17:32:01-08 ! | 1996-12-30 17:32:01-08 ! | 1996-12-31 17:32:01-08 ! | 1997-01-01 17:32:01-08 ! | 1997-02-28 17:32:01-08 ! | 1997-03-01 17:32:01-08 ! | 1997-12-30 17:32:01-08 ! | 1997-12-31 17:32:01-08 ! | 1999-12-31 17:32:01-08 ! | 2000-01-01 17:32:01-08 ! | 2000-12-31 17:32:01-08 ! | 2001-01-01 17:32:01-08 ! | 1957-06-13 00:00:00-07 ! (67 rows) ! SELECT '' AS eight, f1 AS european_iso FROM ABSTIME_TBL; eight | european_iso -------+------------------------ --- 888,894 ---- SHOW DateStyle; NOTICE: DateStyle is ISO with European conventions SELECT '' AS "67", d1 AS european_iso FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS european_iso FROM ABSTIME_TBL; eight | european_iso -------+------------------------ *************** *** 1267,1343 **** SHOW DateStyle; NOTICE: DateStyle is SQL with European conventions SELECT '' AS "67", d1 AS european_sql FROM TIMESTAMP_TBL; ! 67 | european_sql ! ----+---------------------------- ! | invalid ! | -infinity ! | infinity ! | epoch ! | 10/02/1997 17:32:01.00 PST ! | invalid ! | invalid ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:02.00 PST ! | 10/02/1997 17:32:01.40 PST ! | 10/02/1997 17:32:01.50 PST ! | 10/02/1997 17:32:01.60 PST ! | 02/01/1997 00:00:00.00 PST ! | 02/01/1997 03:04:05.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/06/1997 17:32:01.00 PDT ! | 15/03/2000 08:14:01.00 PST ! | 15/03/2000 04:14:02.00 PST ! | 15/03/2000 02:14:03.00 PST ! | 15/03/2000 03:14:04.00 PST ! | 15/03/2000 01:14:05.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:00.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 17:32:01.00 PST ! | 10/02/1997 09:32:01.00 PST ! | 10/02/1997 09:32:01.00 PST ! | 10/02/1997 09:32:01.00 PST ! | 10/06/1997 18:32:01.00 PDT ! | 10/02/1997 17:32:01.00 PST ! | 11/02/1997 17:32:01.00 PST ! | 12/02/1997 17:32:01.00 PST ! | 13/02/1997 17:32:01.00 PST ! | 14/02/1997 17:32:01.00 PST ! | 15/02/1997 17:32:01.00 PST ! | 16/02/1997 17:32:01.00 PST ! | 16/02/0097 17:32 BC ! | 16/02/0097 17:32:01.00 ! | 16/02/0597 17:32:01.00 ! | 16/02/1097 17:32:01.00 ! | 16/02/1697 17:32:01.00 ! | 16/02/1797 17:32:01.00 ! | 16/02/1897 17:32:01.00 ! | 16/02/1997 17:32:01.00 PST ! | 16/02/2097 17:32:01.00 ! | 28/02/1996 17:32:01.00 PST ! | 29/02/1996 17:32:01.00 PST ! | 01/03/1996 17:32:01.00 PST ! | 30/12/1996 17:32:01.00 PST ! | 31/12/1996 17:32:01.00 PST ! | 01/01/1997 17:32:01.00 PST ! | 28/02/1997 17:32:01.00 PST ! | 01/03/1997 17:32:01.00 PST ! | 30/12/1997 17:32:01.00 PST ! | 31/12/1997 17:32:01.00 PST ! | 31/12/1999 17:32:01.00 PST ! | 01/01/2000 17:32:01.00 PST ! | 31/12/2000 17:32:01.00 PST ! | 01/01/2001 17:32:01.00 PST ! | 13/06/1957 00:00:00.00 PDT ! (67 rows) ! SELECT '' AS eight, f1 AS european_sql FROM ABSTIME_TBL; eight | european_sql -------+---------------------------- --- 906,912 ---- SHOW DateStyle; NOTICE: DateStyle is SQL with European conventions SELECT '' AS "67", d1 AS european_sql FROM TIMESTAMP_TBL; ! ERROR: floating point exception! The last floating point operation either exceeded legal ranges or was a divide by zero SELECT '' AS eight, f1 AS european_sql FROM ABSTIME_TBL; eight | european_sql -------+---------------------------- ---------------------- *** expected/rules.out Wed Apr 19 17:32:57 2000 --- results/rules.out Thu Dec 28 18:10:01 2000 *************** *** 1162,1221 **** -- Check that ruleutils are working -- SELECT viewname, definition FROM pg_views ORDER BY viewname; ! viewname | definition ! --------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! iexit | SELECT ih.name, ih.thepath, interpt_pp(ih.thepath, r.thepath) AS exit FROM ihighway ih, ramp r WHERE (ih.thepath ## r.thepath); ! pg_indexes | SELECT c.relname AS tablename, i.relname AS indexname, pg_get_indexdef(x.indexrelid) AS indexdef FROM pg_index x, pg_class c, pg_class i WHERE ((c.oid = x.indrelid) AND (i.oid = x.indexrelid)); ! pg_rules | SELECT c.relname AS tablename, r.rulename, pg_get_ruledef(r.rulename) AS definition FROM pg_rewrite r, pg_class c WHERE ((r.rulename !~ '^_RET'::text) AND (c.oid = r.ev_class)); ! pg_tables | SELECT c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM pg_class c WHERE (((c.relkind = 'r'::"char") OR (c.relkind = 's'::"char")) AND (NOT (EXISTS (SELECT pg_rewrite.rulename FROM pg_rewrite WHERE ((pg_rewrite.ev_class = c.oid) AND (pg_rewrite.ev_type = '1'::"char")))))); ! pg_user | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usetrace, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil FROM pg_shadow; ! pg_views | SELECT c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.relname) AS definition FROM pg_class c WHERE (c.relhasrules AND (EXISTS (SELECT r.rulename FROM pg_rewrite r WHERE ((r.ev_class = c.oid) AND (r.ev_type = '1'::"char"))))); ! rtest_v1 | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1; ! rtest_vcomp | SELECT x.part, (x.size * y.factor) AS size_in_cm FROM rtest_comp x, rtest_unitfact y WHERE (x.unit = y.unit); ! rtest_vview1 | SELECT x.a, x.b FROM rtest_view1 x WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y WHERE (y.a = x.a))); ! rtest_vview2 | SELECT rtest_view1.a, rtest_view1.b FROM rtest_view1 WHERE rtest_view1.v; ! rtest_vview3 | SELECT x.a, x.b FROM rtest_vview2 x WHERE (0 < (SELECT count(*) AS count FROM rtest_view2 y WHERE (y.a = x.a))); ! rtest_vview4 | SELECT x.a, x.b, count(y.a) AS refcount FROM rtest_view1 x, rtest_view2 y WHERE (x.a = y.a) GROUP BY x.a, x.b; ! rtest_vview5 | SELECT rtest_view1.a, rtest_view1.b, rtest_viewfunc1(rtest_view1.a) AS refcount FROM rtest_view1; ! shoe | SELECT sh.shoename, sh.sh_avail, sh.slcolor, sh.slminlen, (sh.slminlen * un.un_fact) AS slminlen_cm, sh.slmaxlen, (sh.slmaxlen * un.un_fact) AS slmaxlen_cm, sh.slunit FROM shoe_data sh, unit un WHERE (sh.slunit = un.un_name); ! shoe_ready | SELECT rsh.shoename, rsh.sh_avail, rsl.sl_name, rsl.sl_avail, int4smaller(rsh.sh_avail, rsl.sl_avail) AS total_avail FROM shoe rsh, shoelace rsl WHERE (((rsl.sl_color = rsh.slcolor) AND (rsl.sl_len_cm >= rsh.slminlen_cm)) AND (rsl.sl_len_cm <= rsh.slmaxlen_cm)); ! shoelace | SELECT s.sl_name, s.sl_avail, s.sl_color, s.sl_len, s.sl_unit, (s.sl_len * u.un_fact) AS sl_len_cm FROM shoelace_data s, unit u WHERE (s.sl_unit = u.un_name); ! shoelace_candelete | SELECT shoelace_obsolete.sl_name, shoelace_obsolete.sl_avail, shoelace_obsolete.sl_color, shoelace_obsolete.sl_len, shoelace_obsolete.sl_unit, shoelace_obsolete.sl_len_cm FROM shoelace_obsolete WHERE (shoelace_obsolete.sl_avail = 0); ! shoelace_obsolete | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color)))); ! street | SELECT r.name, r.thepath, c.cname FROM road r, real_city c WHERE (c.outline ## r.thepath); ! toyemp | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp; ! (20 rows) ! SELECT tablename, rulename, definition FROM pg_rules ORDER BY tablename, rulename; ! tablename | rulename | definition ! ---------------+-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! rtest_emp | rtest_emp_del | CREATE RULE rtest_emp_del AS ON DELETE TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (old.ename, getpgusername(), 'fired '::bpchar, '$0.00'::money, old.salary); ! rtest_emp | rtest_emp_ins | CREATE RULE rtest_emp_ins AS ON INSERT TO rtest_emp DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, getpgusername(), 'hired '::bpchar, new.salary, '$0.00'::money); ! rtest_emp | rtest_emp_upd | CREATE RULE rtest_emp_upd AS ON UPDATE TO rtest_emp WHERE (new.salary <> old.salary) DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, getpgusername(), 'honored '::bpchar, new.salary, old.salary); ! rtest_nothn1 | rtest_nothn_r1 | CREATE RULE rtest_nothn_r1 AS ON INSERT TO rtest_nothn1 WHERE ((new.a >= 10) AND (new.a < 20)) DO INSTEAD SELECT 1; ! rtest_nothn1 | rtest_nothn_r2 | CREATE RULE rtest_nothn_r2 AS ON INSERT TO rtest_nothn1 WHERE ((new.a >= 30) AND (new.a < 40)) DO INSTEAD NOTHING; ! rtest_nothn2 | rtest_nothn_r3 | CREATE RULE rtest_nothn_r3 AS ON INSERT TO rtest_nothn2 WHERE (new.a >= 100) DO INSTEAD INSERT INTO rtest_nothn3 (a, b) VALUES (new.a, new.b); ! rtest_nothn2 | rtest_nothn_r4 | CREATE RULE rtest_nothn_r4 AS ON INSERT TO rtest_nothn2 DO INSTEAD NOTHING; ! rtest_order1 | rtest_order_r1 | CREATE RULE rtest_order_r1 AS ON INSERT TO rtest_order1 DO INSTEAD INSERT INTO rtest_order2 (a, b, c) VALUES (new.a, nextval('rtest_seq'::text), 'rule 1 - this should run 3rd or 4th'::text); ! rtest_order1 | rtest_order_r2 | CREATE RULE rtest_order_r2 AS ON INSERT TO rtest_order1 DO INSERT INTO rtest_order2 (a, b, c) VALUES (new.a, nextval('rtest_seq'::text), 'rule 2 - this should run 1st'::text); ! rtest_order1 | rtest_order_r3 | CREATE RULE rtest_order_r3 AS ON INSERT TO rtest_order1 DO INSTEAD INSERT INTO rtest_order2 (a, b, c) VALUES (new.a, nextval('rtest_seq'::text), 'rule 3 - this should run 3rd or 4th'::text); ! rtest_order1 | rtest_order_r4 | CREATE RULE rtest_order_r4 AS ON INSERT TO rtest_order1 WHERE (rtest_order2.a < 100) DO INSTEAD INSERT INTO rtest_order2 (a, b, c) VALUES (new.a, nextval('rtest_seq'::text), 'rule 4 - this should run 2nd'::text); ! rtest_person | rtest_pers_del | CREATE RULE rtest_pers_del AS ON DELETE TO rtest_person DO DELETE FROM rtest_admin WHERE (rtest_admin.pname = old.pname); ! rtest_person | rtest_pers_upd | CREATE RULE rtest_pers_upd AS ON UPDATE TO rtest_person DO UPDATE rtest_admin SET pname = new.pname WHERE (rtest_admin.pname = old.pname); ! rtest_system | rtest_sys_del | CREATE RULE rtest_sys_del AS ON DELETE TO rtest_system DO (DELETE FROM rtest_interface WHERE (rtest_interface.sysname = old.sysname); DELETE FROM rtest_admin WHERE (rtest_admin.sysname = old.sysname); ); ! rtest_system | rtest_sys_upd | CREATE RULE rtest_sys_upd AS ON UPDATE TO rtest_system DO (UPDATE rtest_interface SET sysname = new.sysname WHERE (rtest_interface.sysname = old.sysname); UPDATE rtest_admin SET sysname = new.sysname WHERE (rtest_admin.sysname = old.sysname); ); ! rtest_t4 | rtest_t4_ins1 | CREATE RULE rtest_t4_ins1 AS ON INSERT TO rtest_t4 WHERE ((new.a >= 10) AND (new.a < 20)) DO INSTEAD INSERT INTO rtest_t5 (a, b) VALUES (new.a, new.b); ! rtest_t4 | rtest_t4_ins2 | CREATE RULE rtest_t4_ins2 AS ON INSERT TO rtest_t4 WHERE ((new.a >= 20) AND (new.a < 30)) DO INSERT INTO rtest_t6 (a, b) VALUES (new.a, new.b); ! rtest_t5 | rtest_t5_ins | CREATE RULE rtest_t5_ins AS ON INSERT TO rtest_t5 WHERE (new.a > 15) DO INSERT INTO rtest_t7 (a, b) VALUES (new.a, new.b); ! rtest_t6 | rtest_t6_ins | CREATE RULE rtest_t6_ins AS ON INSERT TO rtest_t6 WHERE (new.a > 25) DO INSTEAD INSERT INTO rtest_t8 (a, b) VALUES (new.a, new.b); ! rtest_v1 | rtest_v1_del | CREATE RULE rtest_v1_del AS ON DELETE TO rtest_v1 DO INSTEAD DELETE FROM rtest_t1 WHERE (rtest_t1.a = old.a); ! rtest_v1 | rtest_v1_ins | CREATE RULE rtest_v1_ins AS ON INSERT TO rtest_v1 DO INSTEAD INSERT INTO rtest_t1 (a, b) VALUES (new.a, new.b); ! rtest_v1 | rtest_v1_upd | CREATE RULE rtest_v1_upd AS ON UPDATE TO rtest_v1 DO INSTEAD UPDATE rtest_t1 SET a = new.a, b = new.b WHERE (rtest_t1.a = old.a); ! shoelace | shoelace_del | CREATE RULE shoelace_del AS ON DELETE TO shoelace DO INSTEAD DELETE FROM shoelace_data WHERE (shoelace_data.sl_name = old.sl_name); ! shoelace | shoelace_ins | CREATE RULE shoelace_ins AS ON INSERT TO shoelace DO INSTEAD INSERT INTO shoelace_data (sl_name, sl_avail, sl_color, sl_len, sl_unit) VALUES (new.sl_name, new.sl_avail, new.sl_color, new.sl_len, new.sl_unit); ! shoelace | shoelace_upd | CREATE RULE shoelace_upd AS ON UPDATE TO shoelace DO INSTEAD UPDATE shoelace_data SET sl_name = new.sl_name, sl_avail = new.sl_avail, sl_color = new.sl_color, sl_len = new.sl_len, sl_unit = new.sl_unit WHERE (shoelace_data.sl_name = old.sl_name); ! shoelace_data | log_shoelace | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <> old.sl_avail) DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al Bundy'::name, "timestamp"('epoch'::text)); ! shoelace_ok | shoelace_ok_ins | CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok DO INSTEAD UPDATE shoelace SET sl_avail = (shoelace.sl_avail + new.ok_quant) WHERE (shoelace.sl_name = new.ok_name); ! (27 rows) ! --- 1162,1168 ---- -- Check that ruleutils are working -- SELECT viewname, definition FROM pg_views ORDER BY viewname; ! ERROR: cache lookup of attribute -2 in relation 1259 failed SELECT tablename, rulename, definition FROM pg_rules ORDER BY tablename, rulename; ! ERROR: getattproperties: no attribute tuple 1259 -2 ----------------------