Re: ALTER TABLE .. SET WITH / WITHOUT OIDS - Mailing list pgsql-patches

From Fabio Furia Silva
Subject Re: ALTER TABLE .. SET WITH / WITHOUT OIDS
Date
Msg-id b5q0ah$2qa2$1@news.hub.org
Whole thread Raw
In response to ALTER TABLE .. SET WITH / WITHOUT OIDS  (Rod Taylor <rbt@rbt.ca>)
Responses Re: ALTER TABLE .. SET WITH / WITHOUT OIDS  (Rod Taylor <rbt@rbt.ca>)
List pgsql-patches
I am using postgresql 7.3.2 but there is no
ALTER TABLE .. SET WITH / WITHOUT OIDS
command:

test=# create table test (a int) with oids;
test=# alter table teste set without oids;
ERROR:  parser: parse error at or near "set" at character 19

Do I have to apply some patch so that I can remove OIDs from a table without
having to drop it and recreate it?

Thanks,

Fabio.

"Rod Taylor" <rbt@rbt.ca> wrote in message
news:1039359174.79804.100.camel@jester...
> --=-39x4Ba5NCnmHYLSHQVel
> Content-Type: multipart/mixed; boundary="=-kOit5t7LMlG8gYDF7SuD"
>
> --=-kOit5t7LMlG8gYDF7SuD
> Content-Type: text/plain
> Content-Transfer-Encoding: quoted-printable
>
> Opted for the syntax in the subject as I didn't think that ADD / DROP
> OIDS would work (shift/reduce conflicts), and it matches the CREATE
> TABLE oids syntax.
>
> Added and removed the oids column from several inherited tables many
> times, while adding and playing with data.  I could not come up with any
> issues with insert, select, update, delete statements.  So I'll assume
> that the various places reading OIDS are doing the right thing.
>
> Works somewhat like adding / dropping a column with the default of 0.
>
> --=20
> Rod Taylor <rbt@rbt.ca>
>
> PGP Key: http://www.rbt.ca/rbtpub.asc
>
> --=-kOit5t7LMlG8gYDF7SuD
> Content-Disposition: attachment; filename=altoid.patch
> Content-Type: text/plain; name=altoid.patch; charset=ISO-8859-1
> Content-Transfer-Encoding: quoted-printable
>
> ? src/backend/commands/.tablecmds.c.swp
> Index: doc/src/sgml/ref/alter_table.sgml
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file:
/projects/cvsroot/pgsql-server/doc/src/sgml/ref/alter_table.sgml,v
> retrieving revision 1.52
> diff -c -r1.52 alter_table.sgml
> *** doc/src/sgml/ref/alter_table.sgml 2002/10/19 23:09:20 1.52
> --- doc/src/sgml/ref/alter_table.sgml 2002/12/08 14:34:48
> ***************
> *** 34,39 ****
> --- 34,41 ----
>   ALTER TABLE [ ONLY ] <replaceable
class=3D"PARAMETER">table</replaceable>=
>  [ * ]
>       ALTER [ COLUMN ] <replaceable
class=3D"PARAMETER">column</replaceable=
> > SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
>   ALTER TABLE [ ONLY ] <replaceable
class=3D"PARAMETER">table</replaceable>=
>  [ * ]
> +     SET { WITH | WITHOUT } OIDS
> + ALTER TABLE [ ONLY ] <replaceable
class=3D"PARAMETER">table</replaceable>=
>  [ * ]
>       RENAME [ COLUMN ] <replaceable
class=3D"PARAMETER">column</replaceabl=
> e> TO <replaceable
>       class=3D"PARAMETER">new_column</replaceable>
>   ALTER TABLE <replaceable class=3D"PARAMETER">table</replaceable>
> ***************
> *** 287,296 ****
>      </varlistentry>
> =20=20
>      <varlistentry>
>       <term>RENAME</term>
>       <listitem>
>        <para>
> !       The <literal>RENAME</literal> forms change the name of  a table
>         (or an index, sequence, or view) or the name of an individual
colum=
> n in
>         a table. There is no effect on the stored data.
>        </para>
> --- 289,317 ----
>      </varlistentry>
> =20=20
>      <varlistentry>
> +     <term>SET WITH/WITHOUT OIDS</term>
> +     <listitem>
> +      <para>
> +       Adds or removes the <literal>OID</literal> column from the the
tabl=
> e.  When enabling
> +       (setting with) oids in a table, the currently existing tuples are
n=
> ot immediately
> +       numbered.  Rather, it is treated as if a new column has been added
=
> to the table.
> +       Since <literal>OID</literal>s cannot be <literal>NULL</literal>, 0
=
> is used instead.
> +      </para>
> +      <para>
> +       Removing (setting without) oids from a table also do not occur
imme=
> diately.  The
> +       space an <literal>OID</literal> uses will be reclaimed when the
tup=
> le is updated.=20
> +       Without updating the tuple, both the space and the value of the
<li=
> teral>OID</literal>
> +       are maintained indefinitely.  This is semantically similar to the=
> =20
> +       <literal>DROP COLUMN</literal> process.
> +      </para>
> +     </listitem>
> +    </varlistentry>
> +=20
> +    <varlistentry>
>       <term>RENAME</term>
>       <listitem>
>        <para>
> !       The <literal>RENAME</literal> forms change the name of a table
>         (or an index, sequence, or view) or the name of an individual
colum=
> n in
>         a table. There is no effect on the stored data.
>        </para>
> Index: src/backend/catalog/heap.c
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file: /projects/cvsroot/pgsql-server/src/backend/catalog/heap.c,v
> retrieving revision 1.235
> diff -c -r1.235 heap.c
> *** src/backend/catalog/heap.c 2002/11/15 02:50:05 1.235
> --- src/backend/catalog/heap.c 2002/12/08 14:35:30
> ***************
> *** 528,533 ****
> --- 528,585 ----
>   heap_close(rel, RowExclusiveLock);
>   }
> =20=20
> + /*
> +  * AddNewOidAttributeTuple
> +  *
> +  * Create a pg_attribute entry for OIDs
> +  */
> + void
> + AddNewOidAttributeTuple(Oid new_rel_oid)
> + {
> + Form_pg_attribute attStruct;
> + HeapTuple tup;
> + Relation rel;
> + CatalogIndexState indstate;
> +=20
> + /*
> + * open pg_attribute and its indexes.
> + */
> + rel =3D heap_openr(AttributeRelationName, RowExclusiveLock);
> +=20
> + indstate =3D CatalogOpenIndexes(rel);
> +=20
> + /* Add the OID attribute */
> + tup =3D heap_addheader(Natts_pg_attribute,
> + false,
> + ATTRIBUTE_TUPLE_SIZE,
> + &a2);
> +=20
> + /* Fill in the correct relation OID in the copied tuple */
> + attStruct =3D (Form_pg_attribute) GETSTRUCT(tup);
> + attStruct->attrelid =3D new_rel_oid;
> +=20
> + /*
> + * Unneeded since they should be OK in the constant data
> + * anyway
> + */
> + /* attStruct->attstattarget =3D 0; */
> + /* attStruct->attcacheoff =3D -1; */
> +=20
> + simple_heap_insert(rel, tup);
> +=20
> + CatalogIndexInsert(indstate, tup);
> +=20
> + heap_freetuple(tup);
> +=20
> + /*
> + * clean up
> + */
> + CatalogCloseIndexes(indstate);
> +=20
> + heap_close(rel, RowExclusiveLock);
> + }
> +=20
> +=20
>   /* --------------------------------
>    * AddNewRelationTuple
>    *
> Index: src/backend/commands/tablecmds.c
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file:
/projects/cvsroot/pgsql-server/src/backend/commands/tablecmds.c,v
> retrieving revision 1.57
> diff -c -r1.57 tablecmds.c
> *** src/backend/commands/tablecmds.c 2002/11/23 18:26:45 1.57
> --- src/backend/commands/tablecmds.c 2002/12/08 14:36:18
> ***************
> *** 2140,2146 ****
>   heap_close(rel, NoLock);
>   }
> =20=20
> -=20
>   /*
>    * ALTER TABLE ALTER COLUMN SET/DROP DEFAULT
>    */
> --- 2140,2145 ----
> ***************
> *** 2390,2395 ****
> --- 2389,2511 ----
>   heap_close(rel, NoLock); /* close rel, but keep lock! */
>   }
> =20=20
> + /*
> +  * ALTER TABLE SET {WITH | WITHOUT} OIDS
> +  */
> + void
> + AlterTableAlterOids(Oid myrelid, bool recurse, bool setOid)
> + {
> + Relation rel;
> + Relation class_rel;
> + HeapTuple tuple;
> + Form_pg_class tuple_class;
> +=20
> + rel =3D heap_open(myrelid, AccessExclusiveLock);
> +=20
> + if (rel->rd_rel->relkind !=3D RELKIND_RELATION)
> + elog(ERROR, "ALTER TABLE: relation \"%s\" is not a table",
> + RelationGetRelationName(rel));
> +=20
> + if (!allowSystemTableMods
> + && IsSystemRelation(rel))
> + elog(ERROR, "ALTER TABLE: relation \"%s\" is a system catalog",
> + RelationGetRelationName(rel));
> +=20
> + if (!pg_class_ownercheck(myrelid, GetUserId()))
> + aclcheck_error(ACLCHECK_NOT_OWNER, RelationGetRelationName(rel));
> +=20
> +=20
> + /* Get its pg_class tuple, too */
> + class_rel =3D heap_openr(RelationRelationName, RowExclusiveLock);
> +=20
> + tuple =3D SearchSysCacheCopy(RELOID,
> +    ObjectIdGetDatum(myrelid),
> +    0, 0, 0);
> + if (!HeapTupleIsValid(tuple))
> + elog(ERROR, "ALTER TABLE: relation %u not found", myrelid);
> + tuple_class =3D (Form_pg_class) GETSTRUCT(tuple);
> +=20
> + /* Can we change the ownership of this tuple? */
> + CheckTupleType(tuple_class);
> +=20
> + /*
> + * Okay, this is a valid tuple: check it's hasoids flag
> + * to see if we actually need to change anything
> + */
> + if (tuple_class->relhasoids =3D=3D setOid)
> + elog(ERROR, "ALTER TABLE: Table is already %s",
> + setOid ? "WITH OIDS" : "WITHOUT OIDS");
> +=20
> + /*
> + * Propagate to children if desired
> + */
> + if (recurse)
> + {
> + List    *child,
> +    *children;
> +=20
> + /* this routine is actually in the planner */
> + children =3D find_all_inheritors(myrelid);
> +=20
> + /*
> + * find_all_inheritors does the recursive search of the
> + * inheritance hierarchy, so all we have to do is process all of
> + * the relids in the list that it returns.
> + */
> + foreach(child, children)
> + {
> + Oid childrelid =3D lfirsti(child);
> +=20
> + if (childrelid =3D=3D myrelid)
> + continue;
> +=20
> + AlterTableAlterOids(childrelid, false, setOid);
> + }
> + }
> +=20
> +=20
> + tuple_class->relhasoids =3D setOid;
> + simple_heap_update(class_rel, &tuple->t_self, tuple);
> +=20
> + /* Keep the catalog indexes up to date */
> + CatalogUpdateIndexes(class_rel, tuple);
> +=20
> +=20
> +=20
> + if (setOid)
> + /*
> + * Generate the now required OID pg_attribute entry
> + */
> + AddNewOidAttributeTuple(myrelid);
> + else
> + {
> + HeapTuple atttup;
> + Relation attrel;
> +=20
> + /* Add / Remove the oid record from pg_attribute */
> + attrel =3D heap_open(RelOid_pg_attribute, RowExclusiveLock);
> +=20
> + /*
> + * Oids are being removed from the relation, so we need
> + * to remove the oid pg_attribute record relating.
> + */
> + atttup =3D SearchSysCache(ATTNUM,
> + ObjectIdGetDatum(myrelid),
> + ObjectIdAttributeNumber, 0, 0);
> + if (!HeapTupleIsValid(atttup))
> + elog(ERROR, "ALTER TABLE: relation %u doesn't have an Oid column to re=
> move", myrelid);
> +=20
> + simple_heap_delete(attrel, &atttup->t_self);
> +=20
> + ReleaseSysCache(atttup);
> +=20
> + heap_close(attrel, NoLock); /* close rel, but keep lock! */
> + }
> +=20
> +=20
> + heap_close(rel, NoLock); /* close rel, but keep lock! */
> + heap_close(class_rel, NoLock); /* close rel, but keep lock! */
> + }
> =20=20
>   /*
>    * ALTER TABLE DROP COLUMN
> Index: src/backend/parser/gram.y
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/gram.y,v
> retrieving revision 2.383
> diff -c -r2.383 gram.y
> *** src/backend/parser/gram.y 2002/11/25 21:29:40 2.383
> --- src/backend/parser/gram.y 2002/12/08 14:38:01
> ***************
> *** 313,318 ****
> --- 313,319 ----
> =20=20
>   %type <list> constraints_set_list
>   %type <boolean> constraints_set_mode
> + %type <chr> alter_with_without
> =20=20
> =20=20
>   /*
> ***************
> *** 1142,1148 ****
>   | ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
>   {
>   AlterTableStmt *n =3D makeNode(AlterTableStmt);
> ! n->subtype =3D 'O';
>   n->relation =3D $3;
>   n->name =3D $6;
>   $$ =3D (Node *)n;
> --- 1143,1149 ----
>   | ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
>   {
>   AlterTableStmt *n =3D makeNode(AlterTableStmt);
> ! n->subtype =3D 'n';
>   n->relation =3D $3;
>   n->name =3D $6;
>   $$ =3D (Node *)n;
> ***************
> *** 1197,1202 ****
> --- 1198,1211 ----
>   n->behavior =3D $7;
>   $$ =3D (Node *)n;
>   }
> + /* ALTER TABLE <relation> SET {WITH|WITHOUT} OIDS  */
> + | ALTER TABLE relation_expr SET alter_with_without OIDS
> + {
> + AlterTableStmt *n =3D makeNode(AlterTableStmt);
> + n->relation =3D $3;
> + n->subtype =3D $5;
> + $$ =3D (Node *)n;
> + }
>   /* ALTER TABLE <name> CREATE TOAST TABLE */
>   | ALTER TABLE qualified_name CREATE TOAST TABLE
>   {
> ***************
> *** 1217,1222 ****
> --- 1226,1236 ----
>   $$ =3D (Node *)n;
>   }
>   ;
> +=20
> + alter_with_without:
> + WITH { $$ =3D 'O'; }
> + | WITHOUT { $$ =3D 'o'; }
> + ;
> =20=20
>   alter_column_default:
>   SET DEFAULT a_expr
> Index: src/backend/tcop/utility.c
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file: /projects/cvsroot/pgsql-server/src/backend/tcop/utility.c,v
> retrieving revision 1.182
> diff -c -r1.182 utility.c
> *** src/backend/tcop/utility.c 2002/11/15 03:09:38 1.182
> --- src/backend/tcop/utility.c 2002/12/08 14:38:11
> ***************
> *** 491,497 ****
>     interpretInhOption(stmt->relation->inhOpt),
>   stmt->name);
>   break;
> ! case 'O': /* ALTER COLUMN SET NOT NULL */
>   AlterTableAlterColumnSetNotNull(relid,
>     interpretInhOption(stmt->relation->inhOpt),
>   stmt->name);
> --- 491,497 ----
>     interpretInhOption(stmt->relation->inhOpt),
>   stmt->name);
>   break;
> ! case 'n': /* ALTER COLUMN SET NOT NULL */
>   AlterTableAlterColumnSetNotNull(relid,
>     interpretInhOption(stmt->relation->inhOpt),
>   stmt->name);
> ***************
> *** 552,557 ****
> --- 552,567 ----
>   /* get_usesysid raises an error if no such user */
>   AlterTableOwner(relid,
>   get_usesysid(stmt->name));
> + break;
> + case 'O': /* ADD OIDS */
> + AlterTableAlterOids(relid,
> + interpretInhOption(stmt->relation->inhOpt),
> + TRUE);
> + break;
> + case 'o': /* DROP OIDS */
> + AlterTableAlterOids(relid,
> + interpretInhOption(stmt->relation->inhOpt),
> + FALSE);
>   break;
>   default: /* oops */
>   elog(ERROR, "T_AlterTableStmt: unknown subtype");
> Index: src/include/catalog/heap.h
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file: /projects/cvsroot/pgsql-server/src/include/catalog/heap.h,v
> retrieving revision 1.59
> diff -c -r1.59 heap.h
> *** src/include/catalog/heap.h 2002/11/11 22:19:23 1.59
> --- src/include/catalog/heap.h 2002/12/08 14:38:27
> ***************
> *** 52,57 ****
> --- 52,59 ----
>     List *rawColDefaults,
>     List *rawConstraints);
> =20=20
> + extern void AddNewOidAttributeTuple(Oid new_rel_oid);
> +=20
>   extern Node *cookDefault(ParseState *pstate,
>   Node *raw_default,
>   Oid atttypid,
> Index: src/include/commands/tablecmds.h
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file:
/projects/cvsroot/pgsql-server/src/include/commands/tablecmds.h,v
> retrieving revision 1.10
> diff -c -r1.10 tablecmds.h
> *** src/include/commands/tablecmds.h 2002/11/11 22:19:24 1.10
> --- src/include/commands/tablecmds.h 2002/12/08 14:38:34
> ***************
> *** 47,52 ****
> --- 47,54 ----
> =20=20
>   extern void AlterTableOwner(Oid relationOid, int32 newOwnerSysId);
> =20=20
> + extern void AlterTableAlterOids(Oid myrelid, bool recurse, bool setOid);
> +=20
>   extern Oid DefineRelation(CreateStmt *stmt, char relkind);
> =20=20
>   extern void RemoveRelation(const RangeVar *relation, DropBehavior
behavio=
> r);
> Index: src/include/nodes/parsenodes.h
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file: /projects/cvsroot/pgsql-server/src/include/nodes/parsenodes.h,v
> retrieving revision 1.218
> diff -c -r1.218 parsenodes.h
> *** src/include/nodes/parsenodes.h 2002/11/25 03:36:50 1.218
> --- src/include/nodes/parsenodes.h 2002/12/08 14:38:50
> ***************
> *** 808,814 ****
>   * A =3D add column
>   * T =3D alter column default
>   * N =3D alter column drop not null
> ! * O =3D alter column set not null
>   * S =3D alter column statistics
>   * M =3D alter column storage
>   * D =3D drop column
> --- 808,814 ----
>   * A =3D add column
>   * T =3D alter column default
>   * N =3D alter column drop not null
> ! * n =3D alter column set not null
>   * S =3D alter column statistics
>   * M =3D alter column storage
>   * D =3D drop column
> ***************
> *** 818,823 ****
> --- 818,825 ----
>   * X =3D drop constraint
>   * E =3D create toast table
>   * U =3D change owner
> + *  O =3D ADD OIDS
> + *  o =3D DROP OIDS
>   *------------
>   */
>   RangeVar   *relation; /* table to work on */
> Index: src/test/regress/expected/alter_table.out
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file:
/projects/cvsroot/pgsql-server/src/test/regress/expected/alter_ta=
> ble.out,v
> retrieving revision 1.53
> diff -c -r1.53 alter_table.out
> *** src/test/regress/expected/alter_table.out 2002/10/19 01:35:43 1.53
> --- src/test/regress/expected/alter_table.out 2002/12/08 14:39:22
> ***************
> *** 1166,1168 ****
> --- 1166,1260 ----
>   drop table p1, p2 cascade;
>   NOTICE:  Drop cascades to table c1
>   NOTICE:  Drop cascades to table gc1
> + --
> + -- Test the ALTER TABLE {WITH|WITHOUT} OIDS commands
> + --
> + create table altstartwith (col integer) with oids;
> + insert into altstartwith values (1);
> + select oid > 0, * from altstartwith;
> +  ?column? | col=20
> + ----------+-----
> +  t        |   1
> + (1 row)
> +=20
> + alter table altstartwith set with oids; -- fails
> + ERROR:  ALTER TABLE: Table is already WITH OIDS
> + alter table altstartwith set without oids;
> + select oid > 0, * from altstartwith; -- fails
> + ERROR:  Attribute "oid" not found
> + select * from altstartwith;
> +  col=20
> + -----
> +    1
> + (1 row)
> +=20
> + insert into altstartwith values (2);
> + alter table altstartwith set without oids; -- fails
> + ERROR:  ALTER TABLE: Table is already WITHOUT OIDS
> + alter table altstartwith set with oids;
> + insert into altstartwith values (3);
> + select oid > 0, * from altstartwith;
> +  ?column? | col=20
> + ----------+-----
> +  t        |   1
> +  f        |   2
> +  t        |   3
> + (3 rows)
> +=20
> + -- Run inheritance tests
> + create table altwithoid (col integer) with oids;
> + -- Inherits parents oid column
> + create table altinhoid () inherits (altwithoid) without oids;
> + insert into altinhoid values (1);
> + select oid > 0, * from altwithoid;
> +  ?column? | col=20
> + ----------+-----
> +  t        |   1
> + (1 row)
> +=20
> + select oid > 0, * from altinhoid;
> +  ?column? | col=20
> + ----------+-----
> +  t        |   1
> + (1 row)
> +=20
> + alter table altwithoid set without oids;
> + alter table altinhoid set without oids; -- fails
> + ERROR:  ALTER TABLE: Table is already WITHOUT OIDS
> + select oid > 0, * from altwithoid; -- fails
> + ERROR:  Attribute "oid" not found
> + select oid > 0, * from altinhoid; -- fails
> + ERROR:  Attribute "oid" not found
> + select * from altwithoid;
> +  col=20
> + -----
> +    1
> + (1 row)
> +=20
> + select * from altinhoid;
> +  col=20
> + -----
> +    1
> + (1 row)
> +=20
> + alter table only altwithoid set with oids;
> + insert into altwithoid values (2);
> + insert into altinhoid values (3);
> + select oid > 0, * from altwithoid;
> +  ?column? | col=20
> + ----------+-----
> +  t        |   2
> +  t        |   1
> +  f        |   3
> + (3 rows)
> +=20
> + select oid > 0, * from altinhoid; -- fails
> + ERROR:  Attribute "oid" not found
> + select * from altinhoid; -- fails
> +  col=20
> + -----
> +    1
> +    3
> + (2 rows)
> +=20
> + drop table altstartwith cascade;
> Index: src/test/regress/sql/alter_table.sql
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> RCS file:
/projects/cvsroot/pgsql-server/src/test/regress/sql/alter_table.s=
> ql,v
> retrieving revision 1.34
> diff -c -r1.34 alter_table.sql
> *** src/test/regress/sql/alter_table.sql 2002/10/19 01:35:43 1.34
> --- src/test/regress/sql/alter_table.sql 2002/12/08 14:39:38
> ***************
> *** 845,847 ****
> --- 845,900 ----
>   order by relname, attnum;
> =20=20
>   drop table p1, p2 cascade;
> +=20
> + --
> + -- Test the ALTER TABLE {WITH|WITHOUT} OIDS commands
> + --
> + create table altstartwith (col integer) with oids;
> +=20
> + insert into altstartwith values (1);
> +=20
> + select oid > 0, * from altstartwith;
> +=20
> + alter table altstartwith set with oids; -- fails
> + alter table altstartwith set without oids;
> +=20
> + select oid > 0, * from altstartwith; -- fails
> + select * from altstartwith;
> +=20
> + insert into altstartwith values (2);
> +=20
> + alter table altstartwith set without oids; -- fails
> + alter table altstartwith set with oids;
> +=20
> + insert into altstartwith values (3);
> + select oid > 0, * from altstartwith;
> +=20
> + -- Run inheritance tests
> + create table altwithoid (col integer) with oids;
> +=20
> + -- Inherits parents oid column
> + create table altinhoid () inherits (altwithoid) without oids;
> +=20
> + insert into altinhoid values (1);
> +=20
> + select oid > 0, * from altwithoid;
> + select oid > 0, * from altinhoid;
> +=20
> + alter table altwithoid set without oids;
> + alter table altinhoid set without oids; -- fails
> +=20
> + select oid > 0, * from altwithoid; -- fails
> + select oid > 0, * from altinhoid; -- fails
> + select * from altwithoid;
> + select * from altinhoid;
> +=20
> + alter table only altwithoid set with oids;
> +=20
> + insert into altwithoid values (2);
> + insert into altinhoid values (3);
> +=20
> + select oid > 0, * from altwithoid;
> + select oid > 0, * from altinhoid; -- fails
> + select * from altinhoid; -- fails
> +=20
> + drop table altstartwith cascade;
>
> --=-kOit5t7LMlG8gYDF7SuD--
>
> --=-39x4Ba5NCnmHYLSHQVel
> Content-Type: application/pgp-signature; name=signature.asc
> Content-Description: This is a digitally signed message part
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.1 (FreeBSD)
>
> iD8DBQA981zG6DETLow6vwwRAjDbAJ4i8md9fPkCwonRgACWcMdwjc4OEACfQyyD
> oIG7jckmkAoko9952/B2ZjU=
> =fzuK
> -----END PGP SIGNATURE-----
>
> --=-39x4Ba5NCnmHYLSHQVel--
>



pgsql-patches by date:

Previous
From: Alvaro Herrera
Date:
Subject: Deferred trigger cleanup
Next
From: Bruce Momjian
Date:
Subject: Re: plpython test change...