regression.diffs
text/plain
*** 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
----------------------