Skip site navigation (1) Skip section navigation (2)

Re: [PATCHES] TABLEOID patch

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Chris Bitmead <chris(at)bitmead(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Postgres Hackers List <hackers(at)postgreSQL(dot)org>, "pgsql-patches(at)postgresql(dot)org" <pgsql-patches(at)postgreSQL(dot)org>, "pgsql-hackers-oo(at)postgresql(dot)org" <pgsql-hackers-oo(at)postgreSQL(dot)org>
Subject: Re: [PATCHES] TABLEOID patch
Date: 2000-07-02 21:58:19
Message-ID: 200007022158.RAA21797@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackerspgsql-patches
Applied.  Thanks.

> 
> Attached is a new patch which addresses this problem.
> 
> -- 
> Chris Bitmead
> mailto:chris(at)bitmead(dot)com

> ? config.log
> ? config.cache
> ? config.status
> ? nohup.out
> ? GNUmakefile
> ? src/GNUmakefile
> ? src/Makefile.global
> ? src/ID
> ? src/nohup.out
> ? src/backend/postgres
> ? src/backend/fmgr.h
> ? src/backend/parse.h
> ? src/backend/global1.bki.source
> ? src/backend/local1_template1.bki.source
> ? src/backend/global1.description
> ? src/backend/local1_template1.description
> ? src/backend/1
> ? src/backend/catalog/genbki.sh
> ? src/backend/catalog/global1.bki.source
> ? src/backend/catalog/global1.description
> ? src/backend/catalog/local1_template1.bki.source
> ? src/backend/catalog/local1_template1.description
> ? src/backend/parser/y.output
> ? src/backend/parser/y.output.gz
> ? src/backend/parser/gram.y.works
> ? src/backend/parser/gram.y.works.try
> ? src/backend/parser/y.output.noerror
> ? src/backend/parser/gram.y.gz
> ? src/backend/port/Makefile
> ? src/backend/utils/fmgr.h
> ? src/backend/utils/fmgrstamp-h
> ? src/bin/initdb/initdb
> ? src/bin/initlocation/initlocation
> ? src/bin/ipcclean/ipcclean
> ? src/bin/pg_ctl/pg_ctl
> ? src/bin/pg_dump/pg_dump
> ? src/bin/pg_id/pg_id
> ? src/bin/pg_passwd/pg_passwd
> ? src/bin/pg_version/pg_version
> ? src/bin/pgtclsh/mkMakefile.tkdefs.sh
> ? src/bin/pgtclsh/mkMakefile.tcldefs.sh
> ? src/bin/psql/psql
> ? src/bin/scripts/createlang
> ? src/include/version.h
> ? src/include/config.h
> ? src/include/parser/parse.h
> ? src/include/utils/fmgroids.h
> ? src/interfaces/ecpg/lib/libecpg.so.3.1.1
> ? src/interfaces/ecpg/preproc/ecpg
> ? src/interfaces/jdbc/postgresql.jar
> ? src/interfaces/jdbc/example/psql.class
> ? src/interfaces/jdbc/postgresql/DriverClass.java
> ? src/interfaces/jdbc/postgresql/DriverClass.class
> ? src/interfaces/jdbc/postgresql/Connection.class
> ? src/interfaces/jdbc/postgresql/Field.class
> ? src/interfaces/jdbc/postgresql/PG_Stream.class
> ? src/interfaces/jdbc/postgresql/Driver.class
> ? src/interfaces/jdbc/postgresql/ResultSet.class
> ? src/interfaces/jdbc/postgresql/fastpath/Fastpath.class
> ? src/interfaces/jdbc/postgresql/fastpath/FastpathArg.class
> ? src/interfaces/jdbc/postgresql/geometric/PGbox.class
> ? src/interfaces/jdbc/postgresql/geometric/PGpoint.class
> ? src/interfaces/jdbc/postgresql/geometric/PGcircle.class
> ? src/interfaces/jdbc/postgresql/geometric/PGline.class
> ? src/interfaces/jdbc/postgresql/geometric/PGlseg.class
> ? src/interfaces/jdbc/postgresql/geometric/PGpath.class
> ? src/interfaces/jdbc/postgresql/geometric/PGpolygon.class
> ? src/interfaces/jdbc/postgresql/jdbc2/ResultSet.class
> ? src/interfaces/jdbc/postgresql/jdbc2/Connection.class
> ? src/interfaces/jdbc/postgresql/jdbc2/ResultSetMetaData.class
> ? src/interfaces/jdbc/postgresql/jdbc2/DatabaseMetaData.class
> ? src/interfaces/jdbc/postgresql/jdbc2/Statement.class
> ? src/interfaces/jdbc/postgresql/jdbc2/PreparedStatement.class
> ? src/interfaces/jdbc/postgresql/jdbc2/CallableStatement.class
> ? src/interfaces/jdbc/postgresql/largeobject/LargeObjectManager.class
> ? src/interfaces/jdbc/postgresql/largeobject/LargeObject.class
> ? src/interfaces/jdbc/postgresql/util/PSQLException.class
> ? src/interfaces/jdbc/postgresql/util/UnixCrypt.class
> ? src/interfaces/jdbc/postgresql/util/Serialize.class
> ? src/interfaces/jdbc/postgresql/util/PGobject.class
> ? src/interfaces/jdbc/postgresql/util/PGtokenizer.class
> ? src/interfaces/jdbc/postgresql/util/PGmoney.class
> ? src/interfaces/libpgeasy/libpgeasy.so.2.1
> ? src/interfaces/libpgtcl/mkMakefile.tcldefs.sh
> ? src/interfaces/libpgtcl/mkMakefile.tkdefs.sh
> ? src/interfaces/libpq/libpq.so.2.1
> ? src/interfaces/libpq++/libpq++.so.3.1
> ? src/interfaces/odbc/Makefile.global
> ? src/pl/plpgsql/src/libplpgsql.so.1.0
> ? src/test/regress/GNUmakefile
> ? src/test/regress/regress.out
> ? src/test/regress/x.x
> ? src/test/regress/nohup.out
> ? src/test/regress/regression.diffs
> ? src/test/regress/expected/copy.out
> ? src/test/regress/expected/misc.out
> ? src/test/regress/expected/create_function_1.out
> ? src/test/regress/expected/create_function_2.out
> ? src/test/regress/expected/constraints.out
> ? src/test/regress/results/boolean.out
> ? src/test/regress/results/char.out
> ? src/test/regress/results/name.out
> ? src/test/regress/results/varchar.out
> ? src/test/regress/results/text.out
> ? src/test/regress/results/int2.out
> ? src/test/regress/results/int4.out
> ? src/test/regress/results/int8.out
> ? src/test/regress/results/oid.out
> ? src/test/regress/results/float4.out
> ? src/test/regress/results/float8.out
> ? src/test/regress/results/numeric.out
> ? src/test/regress/results/strings.out
> ? src/test/regress/results/numerology.out
> ? src/test/regress/results/point.out
> ? src/test/regress/results/lseg.out
> ? src/test/regress/results/box.out
> ? src/test/regress/results/path.out
> ? src/test/regress/results/polygon.out
> ? src/test/regress/results/circle.out
> ? src/test/regress/results/interval.out
> ? src/test/regress/results/timestamp.out
> ? src/test/regress/results/reltime.out
> ? src/test/regress/results/tinterval.out
> ? src/test/regress/results/inet.out
> ? src/test/regress/results/comments.out
> ? src/test/regress/results/oidjoins.out
> ? src/test/regress/results/type_sanity.out
> ? src/test/regress/results/opr_sanity.out
> ? src/test/regress/results/abstime.out
> ? src/test/regress/results/geometry.out
> ? src/test/regress/results/horology.out
> ? src/test/regress/results/create_function_1.out
> ? src/test/regress/results/create_type.out
> ? src/test/regress/results/create_table.out
> ? src/test/regress/results/create_function_2.out
> ? src/test/regress/results/copy.out
> ? src/test/regress/results/onek.data
> ? src/test/regress/results/constraints.out
> ? src/test/regress/results/triggers.out
> ? src/test/regress/results/create_misc.out
> ? src/test/regress/results/create_aggregate.out
> ? src/test/regress/results/create_operator.out
> ? src/test/regress/results/create_index.out
> ? src/test/regress/results/inherit.out
> ? src/test/regress/results/create_view.out
> ? src/test/regress/results/sanity_check.out
> ? src/test/regress/results/errors.out
> ? src/test/regress/results/select.out
> ? src/test/regress/results/select_into.out
> ? src/test/regress/results/select_distinct.out
> ? src/test/regress/results/select_distinct_on.out
> ? src/test/regress/results/select_implicit.out
> ? src/test/regress/results/select_having.out
> ? src/test/regress/results/subselect.out
> ? src/test/regress/results/union.out
> ? src/test/regress/results/case.out
> ? src/test/regress/results/join.out
> ? src/test/regress/results/aggregates.out
> ? src/test/regress/results/transactions.out
> ? src/test/regress/results/random.out
> ? src/test/regress/results/portals.out
> ? src/test/regress/results/arrays.out
> ? src/test/regress/results/btree_index.out
> ? src/test/regress/results/hash_index.out
> ? src/test/regress/results/misc.out
> ? src/test/regress/results/select_views.out
> ? src/test/regress/results/alter_table.out
> ? src/test/regress/results/portals_p2.out
> ? src/test/regress/results/rules.out
> ? src/test/regress/results/foreign_key.out
> ? src/test/regress/results/limit.out
> ? src/test/regress/results/plpgsql.out
> ? src/test/regress/results/temp.out
> ? src/test/regress/results/stud_emp.data
> ? src/test/regress/sql/copy.sql
> ? src/test/regress/sql/misc.sql
> ? src/test/regress/sql/create_function_1.sql
> ? src/test/regress/sql/create_function_2.sql
> ? src/test/regress/sql/constraints.sql
> Index: doc/src/sgml/inherit.sgml
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/inherit.sgml,v
> retrieving revision 1.10
> diff -c -r1.10 inherit.sgml
> *** doc/src/sgml/inherit.sgml	2000/06/22 22:31:15	1.10
> --- doc/src/sgml/inherit.sgml	2000/07/02 09:29:43
> ***************
> *** 96,101 ****
> --- 96,152 ----
>      <command>UPDATE</command> and <command>DELETE</command> --
>      support this <quote>ONLY</quote> notation.
>     </para>
> + 
> +   <para>
> +   In some cases you may wish to know which table a particular tuple
> +   originated from. There is a system attribute called
> +   <quote>TABLEOID</quote> in each table which can tell you the
> +   originating table:
> + 
> +    <programlisting>
> +     SELECT c.tableoid, c.name, c.altitude
> +     FROM cities c
> +     WHERE c.altitude > 500;
> +    </programlisting>
> + 
> +    which returns:
> + 
> +    <programlisting>
> + +---------+----------+----------+
> + |tableoid |name      | altitude |
> + +---------+----------+----------+
> + |37292    |Las Vegas | 2174     |
> + +---------+----------+----------+
> + |37280    |Mariposa  | 1953     |
> + +---------+----------+----------+
> + |37280    |Madison   | 845      |
> + +---------+----------+----------+
> +    </programlisting>
> + 
> +    If you do a join with pg_class you can see the actual table name:
> + 
> +    <programlisting>
> +     SELECT p.relname, c.name, c.altitude
> +     FROM cities c, pg_class p
> +     WHERE c.altitude > 500 and c.tableoid = p.oid;
> +    </programlisting>
> + 
> +    which returns:
> + 
> +    <programlisting>
> + +---------+----------+----------+
> + |relname  |name      | altitude |
> + +---------+----------+----------+
> + |capitals |Las Vegas | 2174     |
> + +---------+----------+----------+
> + |cities   |Mariposa  | 1953     |
> + +---------+----------+----------+
> + |cities   |Madison   | 845      |
> + +---------+----------+----------+
> +    </programlisting>
> +    
> +   </para>
> + 
>     <note>
>      <title>Deprecated</title> 
>      <para>
> Index: src/backend/access/common/heaptuple.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/common/heaptuple.c,v
> retrieving revision 1.62
> diff -c -r1.62 heaptuple.c
> *** src/backend/access/common/heaptuple.c	2000/04/12 17:14:36	1.62
> --- src/backend/access/common/heaptuple.c	2000/07/02 09:29:46
> ***************
> *** 9,15 ****
>    *
>    *
>    * IDENTIFICATION
> !  *	  $Header: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.62 2000/04/12 17:14:36 momjian Exp $
>    *
>    * NOTES
>    *	  The old interface functions have been converted to macros
> --- 9,15 ----
>    *
>    *
>    * IDENTIFICATION
> !  *	  $Header: /usr/local/cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.62 2000/04/12 17:14:36 momjian Exp $
>    *
>    * NOTES
>    *	  The old interface functions have been converted to macros
> ***************
> *** 169,174 ****
> --- 169,175 ----
>   	else
>   		switch (attnum)
>   		{
> + 			case TableOidAttributeNumber:
>   			case SelfItemPointerAttributeNumber:
>   			case ObjectIdAttributeNumber:
>   			case MinTransactionIdAttributeNumber:
> ***************
> *** 205,210 ****
> --- 206,213 ----
>   
>   	switch (attno)
>   	{
> + 		case TableOidAttributeNumber:
> + 			return sizeof f->t_oid;
>   		case SelfItemPointerAttributeNumber:
>   			return sizeof f->t_ctid;
>   		case ObjectIdAttributeNumber:
> ***************
> *** 237,242 ****
> --- 240,248 ----
>   
>   	switch (attno)
>   	{
> + 		case TableOidAttributeNumber:
> + 			byval = true;
> + 			break;
>   		case SelfItemPointerAttributeNumber:
>   			byval = false;
>   			break;
> ***************
> *** 275,281 ****
>   {
>   	switch (attnum)
>   	{
> ! 			case SelfItemPointerAttributeNumber:
>   			return (Datum) &tup->t_ctid;
>   		case ObjectIdAttributeNumber:
>   			return (Datum) (long) tup->t_oid;
> --- 281,289 ----
>   {
>   	switch (attnum)
>   	{
> ! 		case TableOidAttributeNumber:
> ! 			return (Datum) &tup->t_tableoid;
> ! 		case SelfItemPointerAttributeNumber:
>   			return (Datum) &tup->t_ctid;
>   		case ObjectIdAttributeNumber:
>   			return (Datum) (long) tup->t_oid;
> Index: src/backend/access/heap/heapam.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/access/heap/heapam.c,v
> retrieving revision 1.73
> diff -c -r1.73 heapam.c
> *** src/backend/access/heap/heapam.c	2000/06/30 16:10:40	1.73
> --- src/backend/access/heap/heapam.c	2000/07/02 09:29:49
> ***************
> *** 235,240 ****
> --- 235,242 ----
>   	int			linesleft;
>   	ItemPointer tid = (tuple->t_data == NULL) ?
>   	(ItemPointer) NULL : &(tuple->t_self);
> +     
> + 	tuple->tableOid = relation->rd_id;
>   
>   	/* ----------------
>   	 *	increment access statistics
> ***************
> *** 621,626 ****
> --- 623,629 ----
>   
>   	Assert(lockmode >= NoLock && lockmode < MAX_LOCKMODES);
>   
> + 
>   	/* ----------------
>   	 *	increment access statistics
>   	 * ----------------
> ***************
> *** 1084,1089 ****
> --- 1087,1093 ----
>   	ItemPointer tid = &(tuple->t_self);
>   	OffsetNumber offnum;
>   
> + 	tuple->tableOid = relation->rd_id;
>   	/* ----------------
>   	 *	increment access statistics
>   	 * ----------------
> ***************
> *** 1178,1183 ****
> --- 1182,1188 ----
>   	bool		invalidBlock,
>   				linkend;
>   
> + 	tp.tableOid = relation->rd_id;
>   	/* ----------------
>   	 *	get the buffer from the relation descriptor
>   	 *	Note that this does a buffer pin.
> ***************
> *** 1270,1275 ****
> --- 1275,1281 ----
>   	 *	increment access statistics
>   	 * ----------------
>   	 */
> + 	tup->tableOid = relation->rd_id;
>   	IncrHeapAccessStat(local_insert);
>   	IncrHeapAccessStat(global_insert);
>   
> ***************
> *** 1335,1340 ****
> --- 1341,1347 ----
>   	Buffer		buffer;
>   	int			result;
>   
> + 	tp.tableOid = relation->rd_id;
>   	/* increment access statistics */
>   	IncrHeapAccessStat(local_delete);
>   	IncrHeapAccessStat(global_delete);
> ***************
> *** 1447,1452 ****
> --- 1454,1460 ----
>   	Buffer		buffer;
>   	int			result;
>   
> + 	newtup->tableOid = relation->rd_id;
>   	/* increment access statistics */
>   	IncrHeapAccessStat(local_replace);
>   	IncrHeapAccessStat(global_replace);
> ***************
> *** 1575,1580 ****
> --- 1583,1589 ----
>   	PageHeader	dp;
>   	int			result;
>   
> + 	tuple->tableOid = relation->rd_id;
>   	/* increment access statistics */
>   	IncrHeapAccessStat(local_mark4update);
>   	IncrHeapAccessStat(global_mark4update);
> Index: src/backend/catalog/heap.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/catalog/heap.c,v
> retrieving revision 1.135
> diff -c -r1.135 heap.c
> *** src/backend/catalog/heap.c	2000/07/02 04:46:09	1.135
> --- src/backend/catalog/heap.c	2000/07/02 09:29:55
> ***************
> *** 131,142 ****
>   	MaxCommandIdAttributeNumber, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0'
>   };
>   
> ! static Form_pg_attribute HeapAtt[] = {&a1, &a2, &a3, &a4, &a5, &a6};
>   
>   /* ----------------------------------------------------------------
>    *				XXX END OF UGLY HARD CODED BADNESS XXX
> !  * ----------------------------------------------------------------
> !  */
>   
>   
>   /* ----------------------------------------------------------------
> --- 131,152 ----
>   	MaxCommandIdAttributeNumber, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0'
>   };
>   
> ! /* 
> !    We decide to call this attribute "tableoid" rather than say
> ! "classoid" on the basis that in the future there may be more than one
> ! table of a particular class/type. In any case table is still the word
> ! used in SQL. 
> ! */
> ! static FormData_pg_attribute a7 = {
> ! 	0xffffffff, {"tableoid"}, OIDOID, 0, sizeof(Oid),
> ! 	TableOidAttributeNumber, 0, -1, -1, '\001', 'p', '\0', 'i', '\0', '\0'
> ! };
>   
> + static Form_pg_attribute HeapAtt[] = {&a1, &a2, &a3, &a4, &a5, &a6, &a7};
> + 
>   /* ----------------------------------------------------------------
>    *				XXX END OF UGLY HARD CODED BADNESS XXX
> !  * ---------------------------------------------------------------- */
>   
>   
>   /* ----------------------------------------------------------------
> Index: src/backend/parser/parse_relation.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/parse_relation.c,v
> retrieving revision 1.44
> diff -c -r1.44 parse_relation.c
> *** src/backend/parser/parse_relation.c	2000/06/20 01:41:21	1.44
> --- src/backend/parser/parse_relation.c	2000/07/02 09:29:56
> ***************
> *** 57,62 ****
> --- 57,65 ----
>   	{
>   		"cmax", MaxCommandIdAttributeNumber, CIDOID
>   	},
> + 	{
> + 		"tableoid", TableOidAttributeNumber, OIDOID
> + 	}
>   };
>   
>   #define SPECIALS ((int) (sizeof(special_attr)/sizeof(special_attr[0])))
> Index: src/backend/utils/cache/lsyscache.c
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v
> retrieving revision 1.42
> diff -c -r1.42 lsyscache.c
> *** src/backend/utils/cache/lsyscache.c	2000/06/08 22:37:30	1.42
> --- src/backend/utils/cache/lsyscache.c	2000/07/02 09:29:58
> ***************
> *** 249,254 ****
> --- 249,256 ----
>   	if (attnum == ObjectIdAttributeNumber ||
>   		attnum == SelfItemPointerAttributeNumber)
>   		return 1.0 / (double) ntuples;
> + 	if (attnum == TableOidAttributeNumber)
> + 		return 1.0;
>   
>   	/*
>   	 * VACUUM ANALYZE has not been run for this table. Produce an estimate
> Index: src/include/access/heapam.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/access/heapam.h,v
> retrieving revision 1.54
> diff -c -r1.54 heapam.h
> *** src/include/access/heapam.h	2000/06/30 16:10:49	1.54
> --- src/include/access/heapam.h	2000/07/02 09:30:00
> ***************
> *** 165,200 ****
>    *
>    * ----------------
>    */
> ! #define heap_getattr(tup, attnum, tupleDesc, isnull)						\
> ! (																			\
> ! 	AssertMacro((tup) != NULL &&											\
> ! 		(attnum) > FirstLowInvalidHeapAttributeNumber &&					\
> ! 		(attnum) != 0),														\
> ! 	((attnum) > (int) (tup)->t_data->t_natts) ?								\
> ! 	(																		\
> ! 		((isnull) ? (*(isnull) = true) : (dummyret)NULL),					\
> ! 		(Datum)NULL															\
> ! 	)																		\
> ! 	:																		\
> ! 	(																		\
> ! 		((attnum) > 0) ?													\
> ! 		(																	\
> ! 			fastgetattr((tup), (attnum), (tupleDesc), (isnull))				\
> ! 		)																	\
> ! 		:																	\
> ! 		(																	\
> ! 			((isnull) ? (*(isnull) = false) : (dummyret)NULL),				\
> ! 			((attnum) == SelfItemPointerAttributeNumber) ?					\
> ! 			(																\
> ! 				(Datum)((char *)&((tup)->t_self))							\
> ! 			)																\
> ! 			:																\
> ! 			(																\
> ! 				(Datum)*(unsigned int *)									\
> ! 					((char *)(tup)->t_data + heap_sysoffset[-(attnum)-1])	\
> ! 			)																\
> ! 		)																	\
> ! 	)																		\
>   )
>   
>   extern HeapAccessStatistics heap_access_stats;	/* in stats.c */
> --- 165,205 ----
>    *
>    * ----------------
>    */
> ! #define heap_getattr(tup, attnum, tupleDesc, isnull) \
> ! ( \
> ! 	AssertMacro((tup) != NULL && \
> ! 		(attnum) > FirstLowInvalidHeapAttributeNumber && \
> ! 		(attnum) != 0), \
> ! 	((attnum) > (int) (tup)->t_data->t_natts) ? \
> ! 	( \
> ! 		((isnull) ? (*(isnull) = true) : (dummyret)NULL), \
> ! 		(Datum)NULL \
> ! 	) \
> ! 	: \
> ! 	( \
> ! 		((attnum) > 0) ? \
> ! 		( \
> ! 			fastgetattr((tup), (attnum), (tupleDesc), (isnull)) \
> ! 		) \
> ! 		: \
> ! 		( \
> ! 			((isnull) ? (*(isnull) = false) : (dummyret)NULL), \
> ! 			((attnum) == SelfItemPointerAttributeNumber) ? \
> ! 			( \
> ! 				(Datum)((char *)&((tup)->t_self)) \
> ! 			) \
> ! 			: \
> ! 			(((attnum) == TableOidAttributeNumber) ? \
> ! 			( \
> ! 				(Datum)((tup)->tableOid) \
> ! 			) \
> !             : \
> ! 			( \
> ! 				(Datum)*(unsigned int *) \
> ! 					((char *)(tup)->t_data + heap_sysoffset[-(attnum)-1]) \
> ! 			)) \
> ! 		) \
> ! 	) \
>   )
>   
>   extern HeapAccessStatistics heap_access_stats;	/* in stats.c */
> Index: src/include/access/htup.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/access/htup.h,v
> retrieving revision 1.30
> diff -c -r1.30 htup.h
> *** src/include/access/htup.h	2000/06/02 10:20:26	1.30
> --- src/include/access/htup.h	2000/07/02 09:30:01
> ***************
> *** 133,139 ****
>   #define MinCommandIdAttributeNumber				(-4)
>   #define MaxTransactionIdAttributeNumber			(-5)
>   #define MaxCommandIdAttributeNumber				(-6)
> ! #define FirstLowInvalidHeapAttributeNumber		(-7)
>   
>   /* If you make any changes above, the order off offsets in this must change */
>   extern long heap_sysoffset[];
> --- 133,140 ----
>   #define MinCommandIdAttributeNumber				(-4)
>   #define MaxTransactionIdAttributeNumber			(-5)
>   #define MaxCommandIdAttributeNumber				(-6)
> ! #define TableOidAttributeNumber			        (-7)
> ! #define FirstLowInvalidHeapAttributeNumber		(-8)
>   
>   /* If you make any changes above, the order off offsets in this must change */
>   extern long heap_sysoffset[];
> ***************
> *** 156,161 ****
> --- 157,163 ----
>   {
>   	uint32		t_len;			/* length of *t_data */
>   	ItemPointerData t_self;		/* SelfItemPointer */
> + 	Oid tableOid;                    /* */
>   	MemoryContext t_datamcxt;	/* */
>   	HeapTupleHeader t_data;		/* */
>   } HeapTupleData;
> Index: src/include/catalog/pg_attribute.h
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/catalog/pg_attribute.h,v
> retrieving revision 1.59
> diff -c -r1.59 pg_attribute.h
> *** src/include/catalog/pg_attribute.h	2000/06/12 03:40:52	1.59
> --- src/include/catalog/pg_attribute.h	2000/07/02 09:30:03
> ***************
> *** 267,272 ****
> --- 267,273 ----
>   DATA(insert OID = 0 ( 1247 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1247 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1247 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1247 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_database
> ***************
> *** 282,287 ****
> --- 283,289 ----
>   DATA(insert OID = 0 ( 1262 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1262 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1262 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1262 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_proc
> ***************
> *** 329,334 ****
> --- 331,337 ----
>   DATA(insert OID = 0 ( 1255 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1255 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1255 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1255 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_shadow
> ***************
> *** 348,353 ****
> --- 351,357 ----
>   DATA(insert OID = 0 ( 1260 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1260 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1260 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1260 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_group
> ***************
> *** 362,367 ****
> --- 366,372 ----
>   DATA(insert OID = 0 ( 1261 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1261 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1261 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1261 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_attribute
> ***************
> *** 405,410 ****
> --- 410,416 ----
>   DATA(insert OID = 0 ( 1249 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1249 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1249 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1249 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_class
> ***************
> *** 458,463 ****
> --- 464,470 ----
>   DATA(insert OID = 0 ( 1259 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1259 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1259 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1259 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_attrdef
> ***************
> *** 473,478 ****
> --- 480,486 ----
>   DATA(insert OID = 0 ( 1215 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1215 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1215 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1215 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_relcheck
> ***************
> *** 488,493 ****
> --- 496,502 ----
>   DATA(insert OID = 0 ( 1216 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1216 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1216 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1216 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_trigger
> ***************
> *** 513,518 ****
> --- 522,528 ----
>   DATA(insert OID = 0 ( 1219 cmin				29 0  4  -4 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1219 xmax				28 0  4  -5 0 -1 -1 t p f i f f));
>   DATA(insert OID = 0 ( 1219 cmax				29 0  4  -6 0 -1 -1 t p f i f f));
> + DATA(insert OID = 0 ( 1219 tableoid			26 0  4  -7 0 -1 -1 t p f i f f));
>   
>   /* ----------------
>    *		pg_variable - this relation is modified by special purpose access
> Index: src/test/regress/expected/inherit.out
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/expected/inherit.out,v
> retrieving revision 1.1
> diff -c -r1.1 inherit.out
> *** src/test/regress/expected/inherit.out	2000/06/09 11:12:37	1.1
> --- src/test/regress/expected/inherit.out	2000/07/02 09:30:08
> ***************
> *** 29,150 ****
>   INSERT INTO d(aa) VALUES('dddddd');
>   INSERT INTO d(aa) VALUES('ddddddd');
>   INSERT INTO d(aa) VALUES('dddddddd');
> ! SELECT * FROM a;
> !     aa    
> ! ----------
> !  aaa
> !  aaaa
> !  aaaaa
> !  aaaaaa
> !  aaaaaaa
> !  aaaaaaaa
> !  bbb
> !  bbbb
> !  bbbbb
> !  bbbbbb
> !  bbbbbbb
> !  bbbbbbbb
> !  ccc
> !  cccc
> !  ccccc
> !  cccccc
> !  ccccccc
> !  cccccccc
> !  ddd
> !  dddd
> !  ddddd
> !  dddddd
> !  ddddddd
> !  dddddddd
>   (24 rows)
>   
> ! SELECT * FROM b;
> !     aa    | bb 
> ! ----------+----
> !  bbb      | 
> !  bbbb     | 
> !  bbbbb    | 
> !  bbbbbb   | 
> !  bbbbbbb  | 
> !  bbbbbbbb | 
> !  ddd      | 
> !  dddd     | 
> !  ddddd    | 
> !  dddddd   | 
> !  ddddddd  | 
> !  dddddddd | 
>   (12 rows)
>   
> ! SELECT * FROM c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> !  ddd      | 
> !  dddd     | 
> !  ddddd    | 
> !  dddddd   | 
> !  ddddddd  | 
> !  dddddddd | 
>   (12 rows)
>   
> ! SELECT * FROM d;
> !     aa    | bb | cc | dd 
> ! ----------+----+----+----
> !  ddd      |    |    | 
> !  dddd     |    |    | 
> !  ddddd    |    |    | 
> !  dddddd   |    |    | 
> !  ddddddd  |    |    | 
> !  dddddddd |    |    | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY a;
> !     aa    
> ! ----------
> !  aaa
> !  aaaa
> !  aaaaa
> !  aaaaaa
> !  aaaaaaa
> !  aaaaaaaa
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY b;
> !     aa    | bb 
> ! ----------+----
> !  bbb      | 
> !  bbbb     | 
> !  bbbbb    | 
> !  bbbbbb   | 
> !  bbbbbbb  | 
> !  bbbbbbbb | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY d;
> !     aa    | bb | cc | dd 
> ! ----------+----+----+----
> !  ddd      |    |    | 
> !  dddd     |    |    | 
> !  ddddd    |    |    | 
> !  dddddd   |    |    | 
> !  ddddddd  |    |    | 
> !  dddddddd |    |    | 
>   (6 rows)
>   
>   UPDATE a SET aa='zzzz' WHERE aa='aaaa';
> --- 29,150 ----
>   INSERT INTO d(aa) VALUES('dddddd');
>   INSERT INTO d(aa) VALUES('ddddddd');
>   INSERT INTO d(aa) VALUES('dddddddd');
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> !  relname |    aa    
> ! ---------+----------
> !  a       | aaa
> !  a       | aaaa
> !  a       | aaaaa
> !  a       | aaaaaa
> !  a       | aaaaaaa
> !  a       | aaaaaaaa
> !  b       | bbb
> !  b       | bbbb
> !  b       | bbbbb
> !  b       | bbbbbb
> !  b       | bbbbbbb
> !  b       | bbbbbbbb
> !  c       | ccc
> !  c       | cccc
> !  c       | ccccc
> !  c       | cccccc
> !  c       | ccccccc
> !  c       | cccccccc
> !  d       | ddd
> !  d       | dddd
> !  d       | ddddd
> !  d       | dddddd
> !  d       | ddddddd
> !  d       | dddddddd
>   (24 rows)
>   
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> !  relname |    aa    | bb 
> ! ---------+----------+----
> !  b       | bbb      | 
> !  b       | bbbb     | 
> !  b       | bbbbb    | 
> !  b       | bbbbbb   | 
> !  b       | bbbbbbb  | 
> !  b       | bbbbbbbb | 
> !  d       | ddd      | 
> !  d       | dddd     | 
> !  d       | ddddd    | 
> !  d       | dddddd   | 
> !  d       | ddddddd  | 
> !  d       | dddddddd | 
>   (12 rows)
>   
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> !  d       | ddd      | 
> !  d       | dddd     | 
> !  d       | ddddd    | 
> !  d       | dddddd   | 
> !  d       | ddddddd  | 
> !  d       | dddddddd | 
>   (12 rows)
>   
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> !  relname |    aa    | bb | cc | dd 
> ! ---------+----------+----+----+----
> !  d       | ddd      |    |    | 
> !  d       | dddd     |    |    | 
> !  d       | ddddd    |    |    | 
> !  d       | dddddd   |    |    | 
> !  d       | ddddddd  |    |    | 
> !  d       | dddddddd |    |    | 
> ! (6 rows)
> ! 
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> !  relname |    aa    
> ! ---------+----------
> !  a       | aaa
> !  a       | aaaa
> !  a       | aaaaa
> !  a       | aaaaaa
> !  a       | aaaaaaa
> !  a       | aaaaaaaa
> ! (6 rows)
> ! 
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> !  relname |    aa    | bb 
> ! ---------+----------+----
> !  b       | bbb      | 
> !  b       | bbbb     | 
> !  b       | bbbbb    | 
> !  b       | bbbbbb   | 
> !  b       | bbbbbbb  | 
> !  b       | bbbbbbbb | 
> ! (6 rows)
> ! 
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> !  relname |    aa    | bb | cc | dd 
> ! ---------+----------+----+----+----
> !  d       | ddd      |    |    | 
> !  d       | dddd     |    |    | 
> !  d       | ddddd    |    |    | 
> !  d       | dddddd   |    |    | 
> !  d       | ddddddd  |    |    | 
> !  d       | dddddddd |    |    | 
>   (6 rows)
>   
>   UPDATE a SET aa='zzzz' WHERE aa='aaaa';
> ***************
> *** 152,534 ****
>   UPDATE b SET aa='zzz' WHERE aa='aaa';
>   UPDATE ONLY b SET aa='zzz' WHERE aa='aaa';
>   UPDATE a SET aa='zzzzzz' WHERE aa LIKE 'aaa%';
> ! SELECT * FROM a;
> !     aa    
> ! ----------
> !  zzzz
> !  zzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  bbb
> !  bbbb
> !  bbbbb
> !  bbbbbb
> !  bbbbbbb
> !  bbbbbbbb
> !  ccc
> !  cccc
> !  ccccc
> !  cccccc
> !  ccccccc
> !  cccccccc
> !  ddd
> !  dddd
> !  ddddd
> !  dddddd
> !  ddddddd
> !  dddddddd
>   (24 rows)
>   
> ! SELECT * FROM b;
> !     aa    | bb 
> ! ----------+----
> !  bbb      | 
> !  bbbb     | 
> !  bbbbb    | 
> !  bbbbbb   | 
> !  bbbbbbb  | 
> !  bbbbbbbb | 
> !  ddd      | 
> !  dddd     | 
> !  ddddd    | 
> !  dddddd   | 
> !  ddddddd  | 
> !  dddddddd | 
>   (12 rows)
>   
> ! SELECT * FROM c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> !  ddd      | 
> !  dddd     | 
> !  ddddd    | 
> !  dddddd   | 
> !  ddddddd  | 
> !  dddddddd | 
>   (12 rows)
>   
> ! SELECT * FROM d;
> !     aa    | bb | cc | dd 
> ! ----------+----+----+----
> !  ddd      |    |    | 
> !  dddd     |    |    | 
> !  ddddd    |    |    | 
> !  dddddd   |    |    | 
> !  ddddddd  |    |    | 
> !  dddddddd |    |    | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY a;
> !    aa   
> ! --------
> !  zzzz
> !  zzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY b;
> !     aa    | bb 
> ! ----------+----
> !  bbb      | 
> !  bbbb     | 
> !  bbbbb    | 
> !  bbbbbb   | 
> !  bbbbbbb  | 
> !  bbbbbbbb | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY d;
> !     aa    | bb | cc | dd 
> ! ----------+----+----+----
> !  ddd      |    |    | 
> !  dddd     |    |    | 
> !  ddddd    |    |    | 
> !  dddddd   |    |    | 
> !  ddddddd  |    |    | 
> !  dddddddd |    |    | 
>   (6 rows)
>   
>   UPDATE b SET aa='new';
> ! SELECT * FROM a;
> !     aa    
> ! ----------
> !  zzzz
> !  zzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  ccc
> !  cccc
> !  ccccc
> !  cccccc
> !  ccccccc
> !  cccccccc
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
>   (24 rows)
>   
> ! SELECT * FROM b;
> !  aa  | bb 
> ! -----+----
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
>   (12 rows)
>   
> ! SELECT * FROM c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> !  new      | 
> !  new      | 
> !  new      | 
> !  new      | 
> !  new      | 
> !  new      | 
>   (12 rows)
>   
> ! SELECT * FROM d;
> !  aa  | bb | cc | dd 
> ! -----+----+----+----
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY a;
> !    aa   
> ! --------
> !  zzzz
> !  zzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> !  zzzzzz
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY b;
> !  aa  | bb 
> ! -----+----
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY c;
> !     aa    | cc 
> ! ----------+----
> !  ccc      | 
> !  cccc     | 
> !  ccccc    | 
> !  cccccc   | 
> !  ccccccc  | 
> !  cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY d;
> !  aa  | bb | cc | dd 
> ! -----+----+----+----
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
>   (6 rows)
>   
>   UPDATE a SET aa='new';
>   DELETE FROM ONLY c WHERE aa='new';
> ! SELECT * FROM a;
> !  aa  
> ! -----
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
>   (18 rows)
>   
> ! SELECT * FROM b;
> !  aa  | bb 
> ! -----+----
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
>   (12 rows)
>   
> ! SELECT * FROM c;
> !  aa  | cc 
> ! -----+----
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> ! (6 rows)
> ! 
> ! SELECT * FROM d;
> !  aa  | bb | cc | dd 
> ! -----+----+----+----
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY a;
> !  aa  
> ! -----
> !  new
> !  new
> !  new
> !  new
> !  new
> !  new
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY b;
> !  aa  | bb 
> ! -----+----
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> !  new | 
> ! (6 rows)
> ! 
> ! SELECT * FROM ONLY c;
> !  aa | cc 
> ! ----+----
>   (0 rows)
>   
> ! SELECT * FROM ONLY d;
> !  aa  | bb | cc | dd 
> ! -----+----+----+----
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
> !  new |    |    | 
>   (6 rows)
>   
>   DELETE FROM a;
> ! SELECT * FROM a;
> !  aa 
> ! ----
>   (0 rows)
>   
> ! SELECT * FROM b;
> !  aa | bb 
> ! ----+----
>   (0 rows)
>   
> ! SELECT * FROM c;
> !  aa | cc 
> ! ----+----
>   (0 rows)
>   
> ! SELECT * FROM d;
> !  aa | bb | cc | dd 
> ! ----+----+----+----
>   (0 rows)
>   
> ! SELECT * FROM ONLY a;
> !  aa 
> ! ----
>   (0 rows)
>   
> ! SELECT * FROM ONLY b;
> !  aa | bb 
> ! ----+----
>   (0 rows)
>   
> ! SELECT * FROM ONLY c;
> !  aa | cc 
> ! ----+----
>   (0 rows)
>   
> ! SELECT * FROM ONLY d;
> !  aa | bb | cc | dd 
> ! ----+----+----+----
>   (0 rows)
>   
> --- 152,534 ----
>   UPDATE b SET aa='zzz' WHERE aa='aaa';
>   UPDATE ONLY b SET aa='zzz' WHERE aa='aaa';
>   UPDATE a SET aa='zzzzzz' WHERE aa LIKE 'aaa%';
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> !  relname |    aa    
> ! ---------+----------
> !  a       | zzzz
> !  a       | zzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  b       | bbb
> !  b       | bbbb
> !  b       | bbbbb
> !  b       | bbbbbb
> !  b       | bbbbbbb
> !  b       | bbbbbbbb
> !  c       | ccc
> !  c       | cccc
> !  c       | ccccc
> !  c       | cccccc
> !  c       | ccccccc
> !  c       | cccccccc
> !  d       | ddd
> !  d       | dddd
> !  d       | ddddd
> !  d       | dddddd
> !  d       | ddddddd
> !  d       | dddddddd
>   (24 rows)
>   
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> !  relname |    aa    | bb 
> ! ---------+----------+----
> !  b       | bbb      | 
> !  b       | bbbb     | 
> !  b       | bbbbb    | 
> !  b       | bbbbbb   | 
> !  b       | bbbbbbb  | 
> !  b       | bbbbbbbb | 
> !  d       | ddd      | 
> !  d       | dddd     | 
> !  d       | ddddd    | 
> !  d       | dddddd   | 
> !  d       | ddddddd  | 
> !  d       | dddddddd | 
>   (12 rows)
>   
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> !  d       | ddd      | 
> !  d       | dddd     | 
> !  d       | ddddd    | 
> !  d       | dddddd   | 
> !  d       | ddddddd  | 
> !  d       | dddddddd | 
>   (12 rows)
>   
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> !  relname |    aa    | bb | cc | dd 
> ! ---------+----------+----+----+----
> !  d       | ddd      |    |    | 
> !  d       | dddd     |    |    | 
> !  d       | ddddd    |    |    | 
> !  d       | dddddd   |    |    | 
> !  d       | ddddddd  |    |    | 
> !  d       | dddddddd |    |    | 
> ! (6 rows)
> ! 
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> !  relname |   aa   
> ! ---------+--------
> !  a       | zzzz
> !  a       | zzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> ! (6 rows)
> ! 
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> !  relname |    aa    | bb 
> ! ---------+----------+----
> !  b       | bbb      | 
> !  b       | bbbb     | 
> !  b       | bbbbb    | 
> !  b       | bbbbbb   | 
> !  b       | bbbbbbb  | 
> !  b       | bbbbbbbb | 
> ! (6 rows)
> ! 
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> !  relname |    aa    | bb | cc | dd 
> ! ---------+----------+----+----+----
> !  d       | ddd      |    |    | 
> !  d       | dddd     |    |    | 
> !  d       | ddddd    |    |    | 
> !  d       | dddddd   |    |    | 
> !  d       | ddddddd  |    |    | 
> !  d       | dddddddd |    |    | 
>   (6 rows)
>   
>   UPDATE b SET aa='new';
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> !  relname |    aa    
> ! ---------+----------
> !  a       | zzzz
> !  a       | zzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  c       | ccc
> !  c       | cccc
> !  c       | ccccc
> !  c       | cccccc
> !  c       | ccccccc
> !  c       | cccccccc
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
>   (24 rows)
>   
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa  | bb 
> ! ---------+-----+----
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
>   (12 rows)
>   
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> !  d       | new      | 
> !  d       | new      | 
> !  d       | new      | 
> !  d       | new      | 
> !  d       | new      | 
> !  d       | new      | 
>   (12 rows)
>   
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa  | bb | cc | dd 
> ! ---------+-----+----+----+----
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> ! (6 rows)
> ! 
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> !  relname |   aa   
> ! ---------+--------
> !  a       | zzzz
> !  a       | zzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> !  a       | zzzzzz
> ! (6 rows)
> ! 
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa  | bb 
> ! ---------+-----+----
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> ! (6 rows)
> ! 
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> !  relname |    aa    | cc 
> ! ---------+----------+----
> !  c       | ccc      | 
> !  c       | cccc     | 
> !  c       | ccccc    | 
> !  c       | cccccc   | 
> !  c       | ccccccc  | 
> !  c       | cccccccc | 
> ! (6 rows)
> ! 
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa  | bb | cc | dd 
> ! ---------+-----+----+----+----
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
>   (6 rows)
>   
>   UPDATE a SET aa='new';
>   DELETE FROM ONLY c WHERE aa='new';
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> !  relname | aa  
> ! ---------+-----
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  b       | new
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
> !  d       | new
>   (18 rows)
>   
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa  | bb 
> ! ---------+-----+----
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
>   (12 rows)
>   
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> !  relname | aa  | cc 
> ! ---------+-----+----
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> !  d       | new | 
> ! (6 rows)
> ! 
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa  | bb | cc | dd 
> ! ---------+-----+----+----+----
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> ! (6 rows)
> ! 
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> !  relname | aa  
> ! ---------+-----
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> !  a       | new
> ! (6 rows)
> ! 
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa  | bb 
> ! ---------+-----+----
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> !  b       | new | 
> ! (6 rows)
> ! 
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> !  relname | aa | cc 
> ! ---------+----+----
>   (0 rows)
>   
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa  | bb | cc | dd 
> ! ---------+-----+----+----+----
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
> !  d       | new |    |    | 
>   (6 rows)
>   
>   DELETE FROM a;
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> !  relname | aa 
> ! ---------+----
>   (0 rows)
>   
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa | bb 
> ! ---------+----+----
>   (0 rows)
>   
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> !  relname | aa | cc 
> ! ---------+----+----
>   (0 rows)
>   
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa | bb | cc | dd 
> ! ---------+----+----+----+----
>   (0 rows)
>   
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> !  relname | aa 
> ! ---------+----
>   (0 rows)
>   
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> !  relname | aa | bb 
> ! ---------+----+----
>   (0 rows)
>   
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> !  relname | aa | cc 
> ! ---------+----+----
>   (0 rows)
>   
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> !  relname | aa | bb | cc | dd 
> ! ---------+----+----+----+----
>   (0 rows)
>   
> Index: src/test/regress/sql/inherit.sql
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/sql/inherit.sql,v
> retrieving revision 1.1
> diff -c -r1.1 inherit.sql
> *** src/test/regress/sql/inherit.sql	2000/06/09 11:12:38	1.1
> --- src/test/regress/sql/inherit.sql	2000/07/02 09:30:08
> ***************
> *** 34,47 ****
>   INSERT INTO d(aa) VALUES('ddddddd');
>   INSERT INTO d(aa) VALUES('dddddddd');
>   
> ! SELECT * FROM a;
> ! SELECT * FROM b;
> ! SELECT * FROM c;
> ! SELECT * FROM d;
> ! SELECT * FROM ONLY a;
> ! SELECT * FROM ONLY b;
> ! SELECT * FROM ONLY c;
> ! SELECT * FROM ONLY d;
>   
>   UPDATE a SET aa='zzzz' WHERE aa='aaaa';
>   UPDATE ONLY a SET aa='zzzzz' WHERE aa='aaaaa';
> --- 34,47 ----
>   INSERT INTO d(aa) VALUES('ddddddd');
>   INSERT INTO d(aa) VALUES('dddddddd');
>   
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
>   
>   UPDATE a SET aa='zzzz' WHERE aa='aaaa';
>   UPDATE ONLY a SET aa='zzzzz' WHERE aa='aaaaa';
> ***************
> *** 49,94 ****
>   UPDATE ONLY b SET aa='zzz' WHERE aa='aaa';
>   UPDATE a SET aa='zzzzzz' WHERE aa LIKE 'aaa%';
>   
> ! SELECT * FROM a;
> ! SELECT * FROM b;
> ! SELECT * FROM c;
> ! SELECT * FROM d;
> ! SELECT * FROM ONLY a;
> ! SELECT * FROM ONLY b;
> ! SELECT * FROM ONLY c;
> ! SELECT * FROM ONLY d;
>   
>   UPDATE b SET aa='new';
>   
> ! SELECT * FROM a;
> ! SELECT * FROM b;
> ! SELECT * FROM c;
> ! SELECT * FROM d;
> ! SELECT * FROM ONLY a;
> ! SELECT * FROM ONLY b;
> ! SELECT * FROM ONLY c;
> ! SELECT * FROM ONLY d;
>   
>   UPDATE a SET aa='new';
>   
>   DELETE FROM ONLY c WHERE aa='new';
>   
> ! SELECT * FROM a;
> ! SELECT * FROM b;
> ! SELECT * FROM c;
> ! SELECT * FROM d;
> ! SELECT * FROM ONLY a;
> ! SELECT * FROM ONLY b;
> ! SELECT * FROM ONLY c;
> ! SELECT * FROM ONLY d;
>   
>   DELETE FROM a;
>   
> ! SELECT * FROM a;
> ! SELECT * FROM b;
> ! SELECT * FROM c;
> ! SELECT * FROM d;
> ! SELECT * FROM ONLY a;
> ! SELECT * FROM ONLY b;
> ! SELECT * FROM ONLY c;
> ! SELECT * FROM ONLY d;
> --- 49,94 ----
>   UPDATE ONLY b SET aa='zzz' WHERE aa='aaa';
>   UPDATE a SET aa='zzzzzz' WHERE aa LIKE 'aaa%';
>   
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
>   
>   UPDATE b SET aa='new';
>   
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
>   
>   UPDATE a SET aa='new';
>   
>   DELETE FROM ONLY c WHERE aa='new';
>   
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
>   
>   DELETE FROM a;
>   
> ! SELECT relname, a.* FROM a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM d, pg_class where d.tableoid = pg_class.oid;
> ! SELECT relname, a.* FROM ONLY a, pg_class where a.tableoid = pg_class.oid;
> ! SELECT relname, b.* FROM ONLY b, pg_class where b.tableoid = pg_class.oid;
> ! SELECT relname, c.* FROM ONLY c, pg_class where c.tableoid = pg_class.oid;
> ! SELECT relname, d.* FROM ONLY d, pg_class where d.tableoid = pg_class.oid;
> Index: src/tools/make_mkid
> ===================================================================
> RCS file: /home/projects/pgsql/cvsroot/pgsql/src/tools/make_mkid,v
> retrieving revision 1.4
> diff -c -r1.4 make_mkid
> *** src/tools/make_mkid	2000/03/31 01:41:27	1.4
> --- src/tools/make_mkid	2000/07/02 09:30:08
> ***************
> *** 1,6 ****
>   #!/bin/sh
>   find `pwd`/ \( -name _deadcode -a -prune \) -o \
> ! 	-type f -name '*.[chyl]' -print|sed 's;//;/;g' | mkid
>   
>   find . -name  'CVS' -prune -o -type d -print  |while read DIR
>   do
> --- 1,6 ----
>   #!/bin/sh
>   find `pwd`/ \( -name _deadcode -a -prune \) -o \
> ! 	-type f -name '*.[chyl]' -print|sed 's;//;/;g' | mkid -
>   
>   find . -name  'CVS' -prune -o -type d -print  |while read DIR
>   do


-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

In response to

pgsql-hackers by date

Next:From: Shen Jianxiang(Outlook)Date: 2000-07-03 00:03:27
Subject: fail in installing postgresql-6.5.3 to FreeBSD
Previous:From: Marcin InkielmanDate: 2000-07-02 20:23:02
Subject: Re: [GENERAL] vacuumdb problem

pgsql-patches by date

Next:From: Karel ZakDate: 2000-07-03 12:11:23
Subject: correction: Re: Re: to_date/char (fwd)
Previous:From: Karel ZakDate: 2000-07-02 13:34:30
Subject: Re: to_date/char (fwd)

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group