Hello

2012/1/3 Robert Haas <robertmh...@gmail.com>:
> On Tue, Jan 3, 2012 at 10:38 AM, Pavel Stehule <pavel.steh...@gmail.com> 
> wrote:
>> Hello
>>
>> 2012/1/3 Robert Haas <robertmh...@gmail.com>:
>>> On Mon, Jan 2, 2012 at 12:01 PM, Pavel Stehule <pavel.steh...@gmail.com> 
>>> wrote:
>>>> here is updated patch
>>>
>>> I think the comments in parse_utilcmd.c probably need a bit of adjustment.
>>
>> I don't see it - there is only one comment and it is adjusted with
>> "if" statement.
>>
>> please, show it
>
> Well, basically, the comment preceding the part you altered say "the
> lock level requested here", but "here" is getting spread out quite a
> bit more with this code change.  Maybe that doesn't matter.
>
> However, on further examination, this is a pretty awkward way to write
> the code.  Why not something like this:
>
> rel = relation_openrv_extended(stmt->relation, lockmode, stmt->missing_ok);
> if (rel == NULL)
> {
>    ereport(...);
>    return NIL;
> }
>
> Maybe the intent of sticking heap_openrv_extended() into the upper
> branch of the if statement is to try to bounce relations that aren't
> tables, but that's not actually what that function does (e.g. a
> foreign table will slip through).  And I think if we're going to have
> IF EXISTS support for ALTER TABLE at all, we ought to have it for the
> whole family of related statements: ALTER VIEW, ALTER SEQUENCE, ALTER
> FOREIGN TABLE, etc., not just ALTER TABLE itself.
>

jup, we can continue in enhancing step by step.

I change a patch and now ALTER TABLE, ALTER INDEX, ALTER SEQUENCE and
ALTER VIEW has IF EXISTS clause

Regards

Pavel


> --
> Robert Haas
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
*** ./doc/src/sgml/ref/alter_index.sgml.orig	2012-01-02 17:01:00.000000000 +0100
--- ./doc/src/sgml/ref/alter_index.sgml	2012-01-03 19:45:24.210189185 +0100
***************
*** 21,30 ****
  
   <refsynopsisdiv>
  <synopsis>
! ALTER INDEX <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable class="PARAMETER">new_name</replaceable>
! ALTER INDEX <replaceable class="PARAMETER">name</replaceable> SET TABLESPACE <replaceable class="PARAMETER">tablespace_name</replaceable>
! ALTER INDEX <replaceable class="PARAMETER">name</replaceable> SET ( <replaceable class="PARAMETER">storage_parameter</replaceable> = <replaceable class="PARAMETER">value</replaceable> [, ... ] )
! ALTER INDEX <replaceable class="PARAMETER">name</replaceable> RESET ( <replaceable class="PARAMETER">storage_parameter</replaceable> [, ... ] )
  </synopsis>
   </refsynopsisdiv>
  
--- 21,30 ----
  
   <refsynopsisdiv>
  <synopsis>
! ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable class="PARAMETER">new_name</replaceable>
! ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> SET TABLESPACE <replaceable class="PARAMETER">tablespace_name</replaceable>
! ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> SET ( <replaceable class="PARAMETER">storage_parameter</replaceable> = <replaceable class="PARAMETER">value</replaceable> [, ... ] )
! ALTER INDEX [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable> RESET ( <replaceable class="PARAMETER">storage_parameter</replaceable> [, ... ] )
  </synopsis>
   </refsynopsisdiv>
  
***************
*** 38,43 ****
--- 38,53 ----
    <variablelist>
  
     <varlistentry>
+     <term><literal>IF EXISTS</literal></term>
+     <listitem>
+      <para>
+       Do not throw an error if the index does not exist. A notice is issued
+       in this case.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><literal>RENAME</literal></term>
      <listitem>
       <para>
*** ./doc/src/sgml/ref/alter_sequence.sgml.orig	2012-01-02 17:01:00.000000000 +0100
--- ./doc/src/sgml/ref/alter_sequence.sgml	2012-01-03 18:44:14.397429013 +0100
***************
*** 23,37 ****
  
   <refsynopsisdiv>
  <synopsis>
! ALTER SEQUENCE <replaceable class="parameter">name</replaceable> [ INCREMENT [ BY ] <replaceable class="parameter">increment</replaceable> ]
      [ MINVALUE <replaceable class="parameter">minvalue</replaceable> | NO MINVALUE ] [ MAXVALUE <replaceable class="parameter">maxvalue</replaceable> | NO MAXVALUE ]
      [ START [ WITH ] <replaceable class="parameter">start</replaceable> ]
      [ RESTART [ [ WITH ] <replaceable class="parameter">restart</replaceable> ] ]
      [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ]
      [ OWNED BY { <replaceable class="parameter">table</replaceable>.<replaceable class="parameter">column</replaceable> | NONE } ]
! ALTER SEQUENCE <replaceable class="parameter">name</replaceable> OWNER TO <replaceable class="PARAMETER">new_owner</replaceable>
! ALTER SEQUENCE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
! ALTER SEQUENCE <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
  </synopsis>
   </refsynopsisdiv>
  
--- 23,37 ----
  
   <refsynopsisdiv>
  <synopsis>
! ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> [ INCREMENT [ BY ] <replaceable class="parameter">increment</replaceable> ]
      [ MINVALUE <replaceable class="parameter">minvalue</replaceable> | NO MINVALUE ] [ MAXVALUE <replaceable class="parameter">maxvalue</replaceable> | NO MAXVALUE ]
      [ START [ WITH ] <replaceable class="parameter">start</replaceable> ]
      [ RESTART [ [ WITH ] <replaceable class="parameter">restart</replaceable> ] ]
      [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ]
      [ OWNED BY { <replaceable class="parameter">table</replaceable>.<replaceable class="parameter">column</replaceable> | NONE } ]
! ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO <replaceable class="PARAMETER">new_owner</replaceable>
! ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
! ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
  </synopsis>
   </refsynopsisdiv>
  
***************
*** 71,76 ****
--- 71,86 ----
       </varlistentry>
  
       <varlistentry>
+       <term><literal>IF EXISTS</literal></term>
+       <listitem>
+        <para>
+         Do not throw an error if the sequence does not exist. A notice is issued
+         in this case.
+        </para>
+       </listitem>
+      </varlistentry>
+ 
+      <varlistentry>
        <term><replaceable class="parameter">increment</replaceable></term>
        <listitem>
         <para>
*** ./doc/src/sgml/ref/alter_table.sgml.orig	2012-01-02 17:04:00.295638725 +0100
--- ./doc/src/sgml/ref/alter_table.sgml	2012-01-02 17:52:24.153449002 +0100
***************
*** 21,33 ****
  
   <refsynopsisdiv>
  <synopsis>
! ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">name</replaceable> [ * ]
      <replaceable class="PARAMETER">action</replaceable> [, ... ]
! ALTER TABLE [ ONLY ] <replaceable class="PARAMETER">name</replaceable> [ * ]
      RENAME [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> TO <replaceable class="PARAMETER">new_column</replaceable>
! ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
      RENAME TO <replaceable class="PARAMETER">new_name</replaceable>
! ALTER TABLE <replaceable class="PARAMETER">name</replaceable>
      SET SCHEMA <replaceable class="PARAMETER">new_schema</replaceable>
  
  <phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase>
--- 21,33 ----
  
   <refsynopsisdiv>
  <synopsis>
! ALTER TABLE [ IF EXISTS ] [ ONLY ] <replaceable class="PARAMETER">name</replaceable> [ * ]
      <replaceable class="PARAMETER">action</replaceable> [, ... ]
! ALTER TABLE [ IF EXISTS ] [ ONLY ] <replaceable class="PARAMETER">name</replaceable> [ * ]
      RENAME [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> TO <replaceable class="PARAMETER">new_column</replaceable>
! ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
      RENAME TO <replaceable class="PARAMETER">new_name</replaceable>
! ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
      SET SCHEMA <replaceable class="PARAMETER">new_schema</replaceable>
  
  <phrase>where <replaceable class="PARAMETER">action</replaceable> is one of:</phrase>
***************
*** 110,115 ****
--- 110,125 ----
     </varlistentry>
  
     <varlistentry>
+     <term><literal>IF EXISTS</literal></term>
+     <listitem>
+      <para>
+       Do not throw an error if the table does not exist. A notice is issued
+       in this case.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><literal>SET DATA TYPE</literal></term>
      <listitem>
       <para>
*** ./doc/src/sgml/ref/alter_view.sgml.orig	2012-01-02 17:01:00.000000000 +0100
--- ./doc/src/sgml/ref/alter_view.sgml	2012-01-03 19:46:23.473185308 +0100
***************
*** 21,33 ****
  
   <refsynopsisdiv>
  <synopsis>
! ALTER VIEW <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> SET DEFAULT <replaceable class="PARAMETER">expression</replaceable>
! ALTER VIEW <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> DROP DEFAULT
! ALTER VIEW <replaceable class="parameter">name</replaceable> OWNER TO <replaceable class="PARAMETER">new_owner</replaceable>
! ALTER VIEW <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
! ALTER VIEW <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
! ALTER VIEW <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">view_option_name</replaceable> [= <replaceable class="parameter">view_option_value</replaceable>] [, ... ] )
! ALTER VIEW <replaceable class="parameter">name</replaceable> RESET ( <replaceable class="parameter">view_option_name</replaceable> [, ... ] )
  </synopsis>
   </refsynopsisdiv>
  
--- 21,33 ----
  
   <refsynopsisdiv>
  <synopsis>
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> SET DEFAULT <replaceable class="PARAMETER">expression</replaceable>
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="PARAMETER">column</replaceable> DROP DEFAULT
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO <replaceable class="PARAMETER">new_owner</replaceable>
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">view_option_name</replaceable> [= <replaceable class="parameter">view_option_value</replaceable>] [, ... ] )
! ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RESET ( <replaceable class="parameter">view_option_name</replaceable> [, ... ] )
  </synopsis>
   </refsynopsisdiv>
  
***************
*** 66,71 ****
--- 66,81 ----
     </varlistentry>
  
     <varlistentry>
+     <term><literal>IF EXISTS</literal></term>
+     <listitem>
+      <para>
+       Do not throw an error if the view does not exist. A notice is issued
+       in this case.
+      </para>
+     </listitem>
+    </varlistentry>
+ 
+    <varlistentry>
      <term><literal>SET</literal>/<literal>DROP DEFAULT</literal></term>
      <listitem>
       <para>
*** ./src/backend/commands/alter.c.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/backend/commands/alter.c	2012-01-03 20:00:08.007131425 +0100
***************
*** 193,199 ****
  		case OBJECT_VIEW:
  		case OBJECT_FOREIGN_TABLE:
  			AlterTableNamespace(stmt->relation, stmt->newschema,
! 								stmt->objectType, AccessExclusiveLock);
  			break;
  
  		case OBJECT_TSPARSER:
--- 193,200 ----
  		case OBJECT_VIEW:
  		case OBJECT_FOREIGN_TABLE:
  			AlterTableNamespace(stmt->relation, stmt->newschema,
! 								stmt->objectType, AccessExclusiveLock,
! 										    stmt->missing_ok);
  			break;
  
  		case OBJECT_TSPARSER:
*** ./src/backend/commands/sequence.c.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/backend/commands/sequence.c	2012-01-03 20:27:50.235022797 +0100
***************
*** 425,431 ****
  	List	   *owned_by;
  
  	/* Open and lock sequence. */
! 	relid = RangeVarGetRelid(stmt->sequence, AccessShareLock, false);
  	init_sequence(relid, &elm, &seqrel);
  
  	/* allow ALTER to sequence owner only */
--- 425,439 ----
  	List	   *owned_by;
  
  	/* Open and lock sequence. */
! 	relid = RangeVarGetRelid(stmt->sequence, AccessShareLock, stmt->missing_ok);
! 	if (relid == InvalidOid)
! 	{
! 		ereport(NOTICE,
! 				(errmsg("relation \"%s\" does not exist, skipping",
! 							stmt->sequence->relname)));
! 		return;
! 	}
! 
  	init_sequence(relid, &elm, &seqrel);
  
  	/* allow ALTER to sequence owner only */
*** ./src/backend/commands/tablecmds.c.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/backend/commands/tablecmds.c	2012-01-03 20:01:52.232124614 +0100
***************
*** 2409,2417 ****
  	 * lock escalation.
  	 */
  	relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
! 									 false, false,
  									 RangeVarCallbackForRenameRelation,
  									 (void *) stmt);
  
  	/* Do the work */
  	RenameRelationInternal(relid, stmt->newname);
--- 2409,2424 ----
  	 * lock escalation.
  	 */
  	relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
! 									 stmt->missing_ok, false,
  									 RangeVarCallbackForRenameRelation,
  									 (void *) stmt);
+ 	if (relid == InvalidOid)
+ 	{
+ 		ereport(NOTICE,
+ 				(errmsg("relation \"%s\" does not exist, skipping",
+ 							stmt->relation->relname)));
+ 		return;
+ 	}
  
  	/* Do the work */
  	RenameRelationInternal(relid, stmt->newname);
***************
*** 9627,9633 ****
   */
  void
  AlterTableNamespace(RangeVar *relation, const char *newschema,
! 					ObjectType stmttype, LOCKMODE lockmode)
  {
  	Relation	rel;
  	Oid			relid;
--- 9634,9641 ----
   */
  void
  AlterTableNamespace(RangeVar *relation, const char *newschema,
! 					ObjectType stmttype, LOCKMODE lockmode,
! 										bool missing_ok)
  {
  	Relation	rel;
  	Oid			relid;
***************
*** 9635,9643 ****
  	Oid			nspOid;
  	Relation	classRel;
  
! 	relid = RangeVarGetRelidExtended(relation, lockmode, false, false,
  									 RangeVarCallbackForAlterTableNamespace,
  									 (void *) &stmttype);
  	rel = relation_open(relid, NoLock);
  
  	oldNspOid = RelationGetNamespace(rel);
--- 9643,9658 ----
  	Oid			nspOid;
  	Relation	classRel;
  
! 	relid = RangeVarGetRelidExtended(relation, lockmode, missing_ok, false,
  									 RangeVarCallbackForAlterTableNamespace,
  									 (void *) &stmttype);
+ 	if (relid == InvalidOid)
+ 	{
+ 		ereport(NOTICE,
+ 				(errmsg("relation \"%s\" does not exist, skipping",
+ 							relation->relname)));
+ 		return;
+ 	}
  	rel = relation_open(relid, NoLock);
  
  	oldNspOid = RelationGetNamespace(rel);
*** ./src/backend/nodes/copyfuncs.c.orig	2012-01-02 17:01:00.373650482 +0100
--- ./src/backend/nodes/copyfuncs.c	2012-01-03 20:15:14.371072201 +0100
***************
*** 2540,2545 ****
--- 2540,2546 ----
  	COPY_NODE_FIELD(relation);
  	COPY_NODE_FIELD(cmds);
  	COPY_SCALAR_FIELD(relkind);
+ 	COPY_SCALAR_FIELD(missing_ok);
  
  	return newnode;
  }
***************
*** 2903,2908 ****
--- 2904,2910 ----
  	COPY_STRING_FIELD(subname);
  	COPY_STRING_FIELD(newname);
  	COPY_SCALAR_FIELD(behavior);
+ 	COPY_SCALAR_FIELD(missing_ok);
  
  	return newnode;
  }
***************
*** 2918,2923 ****
--- 2920,2926 ----
  	COPY_NODE_FIELD(objarg);
  	COPY_STRING_FIELD(addname);
  	COPY_STRING_FIELD(newschema);
+ 	COPY_SCALAR_FIELD(missing_ok);
  
  	return newnode;
  }
***************
*** 3221,3226 ****
--- 3224,3230 ----
  
  	COPY_NODE_FIELD(sequence);
  	COPY_NODE_FIELD(options);
+ 	COPY_SCALAR_FIELD(missing_ok);
  
  	return newnode;
  }
*** ./src/backend/nodes/equalfuncs.c.orig	2012-01-02 17:01:00.374650482 +0100
--- ./src/backend/nodes/equalfuncs.c	2012-01-03 20:15:30.763071125 +0100
***************
*** 1010,1015 ****
--- 1010,1016 ----
  	COMPARE_NODE_FIELD(relation);
  	COMPARE_NODE_FIELD(cmds);
  	COMPARE_SCALAR_FIELD(relkind);
+ 	COMPARE_SCALAR_FIELD(missing_ok);
  
  	return true;
  }
***************
*** 1309,1314 ****
--- 1310,1316 ----
  	COMPARE_STRING_FIELD(subname);
  	COMPARE_STRING_FIELD(newname);
  	COMPARE_SCALAR_FIELD(behavior);
+ 	COMPARE_SCALAR_FIELD(missing_ok);
  
  	return true;
  }
***************
*** 1322,1327 ****
--- 1324,1330 ----
  	COMPARE_NODE_FIELD(objarg);
  	COMPARE_STRING_FIELD(addname);
  	COMPARE_STRING_FIELD(newschema);
+ 	COMPARE_SCALAR_FIELD(missing_ok);
  
  	return true;
  }
***************
*** 1575,1580 ****
--- 1578,1584 ----
  {
  	COMPARE_NODE_FIELD(sequence);
  	COMPARE_NODE_FIELD(options);
+ 	COMPARE_SCALAR_FIELD(missing_ok);
  
  	return true;
  }
*** ./src/backend/parser/gram.y.orig	2012-01-02 17:01:00.391650482 +0100
--- ./src/backend/parser/gram.y	2012-01-03 20:28:28.330020308 +0100
***************
*** 1629,1634 ****
--- 1629,1644 ----
  					n->relation = $3;
  					n->cmds = $4;
  					n->relkind = OBJECT_TABLE;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 		|	ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds
+ 				{
+ 					AlterTableStmt *n = makeNode(AlterTableStmt);
+ 					n->relation = $5;
+ 					n->cmds = $6;
+ 					n->relkind = OBJECT_TABLE;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  		|	ALTER INDEX qualified_name alter_table_cmds
***************
*** 1637,1642 ****
--- 1647,1662 ----
  					n->relation = $3;
  					n->cmds = $4;
  					n->relkind = OBJECT_INDEX;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 		|	ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds
+ 				{
+ 					AlterTableStmt *n = makeNode(AlterTableStmt);
+ 					n->relation = $5;
+ 					n->cmds = $6;
+ 					n->relkind = OBJECT_INDEX;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  		|	ALTER SEQUENCE qualified_name alter_table_cmds
***************
*** 1645,1650 ****
--- 1665,1680 ----
  					n->relation = $3;
  					n->cmds = $4;
  					n->relkind = OBJECT_SEQUENCE;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 		|	ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds
+ 				{
+ 					AlterTableStmt *n = makeNode(AlterTableStmt);
+ 					n->relation = $5;
+ 					n->cmds = $6;
+ 					n->relkind = OBJECT_SEQUENCE;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  		|	ALTER VIEW qualified_name alter_table_cmds
***************
*** 1653,1658 ****
--- 1683,1698 ----
  					n->relation = $3;
  					n->cmds = $4;
  					n->relkind = OBJECT_VIEW;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 		|	ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds
+ 				{
+ 					AlterTableStmt *n = makeNode(AlterTableStmt);
+ 					n->relation = $5;
+ 					n->cmds = $6;
+ 					n->relkind = OBJECT_VIEW;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  		;
***************
*** 3076,3083 ****
--- 3116,3133 ----
  					AlterSeqStmt *n = makeNode(AlterSeqStmt);
  					n->sequence = $3;
  					n->options = $4;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER SEQUENCE IF_P EXISTS qualified_name SeqOptList
+ 				{
+ 					AlterSeqStmt *n = makeNode(AlterSeqStmt);
+ 					n->sequence = $5;
+ 					n->options = $6;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
+ 
  		;
  
  OptSeqOptList: SeqOptList							{ $$ = $1; }
***************
*** 6425,6430 ****
--- 6475,6481 ----
  					n->object = $3;
  					n->objarg = $4;
  					n->newname = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER COLLATION any_name RENAME TO name
***************
*** 6433,6438 ****
--- 6484,6490 ----
  					n->renameType = OBJECT_COLLATION;
  					n->object = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER CONVERSION_P any_name RENAME TO name
***************
*** 6441,6446 ****
--- 6493,6499 ----
  					n->renameType = OBJECT_CONVERSION;
  					n->object = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER DATABASE database_name RENAME TO database_name
***************
*** 6449,6454 ****
--- 6502,6508 ----
  					n->renameType = OBJECT_DATABASE;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER DOMAIN_P any_name RENAME TO name
***************
*** 6457,6462 ****
--- 6511,6517 ----
  					n->renameType = OBJECT_DOMAIN;
  					n->object = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER FOREIGN DATA_P WRAPPER name RENAME TO name
***************
*** 6465,6470 ****
--- 6520,6526 ----
  					n->renameType = OBJECT_FDW;
  					n->subname = $5;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER FUNCTION function_with_argtypes RENAME TO name
***************
*** 6474,6479 ****
--- 6530,6536 ----
  					n->object = $3->funcname;
  					n->objarg = $3->funcargs;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER GROUP_P RoleId RENAME TO RoleId
***************
*** 6482,6487 ****
--- 6539,6545 ----
  					n->renameType = OBJECT_ROLE;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER opt_procedural LANGUAGE name RENAME TO name
***************
*** 6490,6495 ****
--- 6548,6554 ----
  					n->renameType = OBJECT_LANGUAGE;
  					n->subname = $4;
  					n->newname = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER OPERATOR CLASS any_name USING access_method RENAME TO name
***************
*** 6499,6504 ****
--- 6558,6564 ----
  					n->object = $4;
  					n->subname = $6;
  					n->newname = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER OPERATOR FAMILY any_name USING access_method RENAME TO name
***************
*** 6508,6513 ****
--- 6568,6574 ----
  					n->object = $4;
  					n->subname = $6;
  					n->newname = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER SCHEMA name RENAME TO name
***************
*** 6516,6521 ****
--- 6577,6583 ----
  					n->renameType = OBJECT_SCHEMA;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER SERVER name RENAME TO name
***************
*** 6524,6529 ****
--- 6586,6592 ----
  					n->renameType = OBJECT_FOREIGN_SERVER;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TABLE relation_expr RENAME TO name
***************
*** 6533,6538 ****
--- 6596,6612 ----
  					n->relation = $3;
  					n->subname = NULL;
  					n->newname = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER TABLE IF_P EXISTS relation_expr RENAME TO name
+ 				{
+ 					RenameStmt *n = makeNode(RenameStmt);
+ 					n->renameType = OBJECT_TABLE;
+ 					n->relation = $5;
+ 					n->subname = NULL;
+ 					n->newname = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER SEQUENCE qualified_name RENAME TO name
***************
*** 6542,6547 ****
--- 6616,6632 ----
  					n->relation = $3;
  					n->subname = NULL;
  					n->newname = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name
+ 				{
+ 					RenameStmt *n = makeNode(RenameStmt);
+ 					n->renameType = OBJECT_SEQUENCE;
+ 					n->relation = $5;
+ 					n->subname = NULL;
+ 					n->newname = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER VIEW qualified_name RENAME TO name
***************
*** 6551,6556 ****
--- 6636,6652 ----
  					n->relation = $3;
  					n->subname = NULL;
  					n->newname = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER VIEW IF_P EXISTS qualified_name RENAME TO name
+ 				{
+ 					RenameStmt *n = makeNode(RenameStmt);
+ 					n->renameType = OBJECT_VIEW;
+ 					n->relation = $5;
+ 					n->subname = NULL;
+ 					n->newname = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER INDEX qualified_name RENAME TO name
***************
*** 6560,6565 ****
--- 6656,6672 ----
  					n->relation = $3;
  					n->subname = NULL;
  					n->newname = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER INDEX IF_P EXISTS qualified_name RENAME TO name
+ 				{
+ 					RenameStmt *n = makeNode(RenameStmt);
+ 					n->renameType = OBJECT_INDEX;
+ 					n->relation = $5;
+ 					n->subname = NULL;
+ 					n->newname = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER FOREIGN TABLE relation_expr RENAME TO name
***************
*** 6569,6574 ****
--- 6676,6682 ----
  					n->relation = $4;
  					n->subname = NULL;
  					n->newname = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TABLE relation_expr RENAME opt_column name TO name
***************
*** 6579,6584 ****
--- 6687,6693 ----
  					n->relation = $3;
  					n->subname = $6;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name
***************
*** 6589,6594 ****
--- 6698,6704 ----
  					n->relation = $4;
  					n->subname = $7;
  					n->newname = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TRIGGER name ON qualified_name RENAME TO name
***************
*** 6598,6603 ****
--- 6708,6714 ----
  					n->relation = $5;
  					n->subname = $3;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER ROLE RoleId RENAME TO RoleId
***************
*** 6606,6611 ****
--- 6717,6723 ----
  					n->renameType = OBJECT_ROLE;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER USER RoleId RENAME TO RoleId
***************
*** 6614,6619 ****
--- 6726,6732 ----
  					n->renameType = OBJECT_ROLE;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TABLESPACE name RENAME TO name
***************
*** 6622,6627 ****
--- 6735,6741 ----
  					n->renameType = OBJECT_TABLESPACE;
  					n->subname = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TABLESPACE name SET reloptions
***************
*** 6648,6653 ****
--- 6762,6768 ----
  					n->renameType = OBJECT_TSPARSER;
  					n->object = $5;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name
***************
*** 6656,6661 ****
--- 6771,6777 ----
  					n->renameType = OBJECT_TSDICTIONARY;
  					n->object = $5;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name
***************
*** 6664,6669 ****
--- 6780,6786 ----
  					n->renameType = OBJECT_TSTEMPLATE;
  					n->object = $5;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name
***************
*** 6672,6677 ****
--- 6789,6795 ----
  					n->renameType = OBJECT_TSCONFIGURATION;
  					n->object = $5;
  					n->newname = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TYPE_P any_name RENAME TO name
***************
*** 6680,6685 ****
--- 6798,6804 ----
  					n->renameType = OBJECT_TYPE;
  					n->object = $3;
  					n->newname = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior
***************
*** 6691,6696 ****
--- 6810,6816 ----
  					n->subname = $6;
  					n->newname = $8;
  					n->behavior = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  		;
***************
*** 6717,6722 ****
--- 6837,6843 ----
  					n->object = $3;
  					n->objarg = $4;
  					n->newschema = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER COLLATION any_name SET SCHEMA name
***************
*** 6725,6730 ****
--- 6846,6852 ----
  					n->objectType = OBJECT_COLLATION;
  					n->object = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER CONVERSION_P any_name SET SCHEMA name
***************
*** 6733,6738 ****
--- 6855,6861 ----
  					n->objectType = OBJECT_CONVERSION;
  					n->object = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER DOMAIN_P any_name SET SCHEMA name
***************
*** 6741,6746 ****
--- 6864,6870 ----
  					n->objectType = OBJECT_DOMAIN;
  					n->object = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER EXTENSION any_name SET SCHEMA name
***************
*** 6749,6754 ****
--- 6873,6879 ----
  					n->objectType = OBJECT_EXTENSION;
  					n->object = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER FUNCTION function_with_argtypes SET SCHEMA name
***************
*** 6758,6763 ****
--- 6883,6889 ----
  					n->object = $3->funcname;
  					n->objarg = $3->funcargs;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER OPERATOR any_operator oper_argtypes SET SCHEMA name
***************
*** 6767,6772 ****
--- 6893,6899 ----
  					n->object = $3;
  					n->objarg = $4;
  					n->newschema = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER OPERATOR CLASS any_name USING access_method SET SCHEMA name
***************
*** 6776,6781 ****
--- 6903,6909 ----
  					n->object = $4;
  					n->addname = $6;
  					n->newschema = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER OPERATOR FAMILY any_name USING access_method SET SCHEMA name
***************
*** 6785,6790 ****
--- 6913,6919 ----
  					n->object = $4;
  					n->addname = $6;
  					n->newschema = $9;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TABLE relation_expr SET SCHEMA name
***************
*** 6793,6798 ****
--- 6922,6937 ----
  					n->objectType = OBJECT_TABLE;
  					n->relation = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name
+ 				{
+ 					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
+ 					n->objectType = OBJECT_TABLE;
+ 					n->relation = $5;
+ 					n->newschema = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name
***************
*** 6801,6806 ****
--- 6940,6946 ----
  					n->objectType = OBJECT_TSPARSER;
  					n->object = $5;
  					n->newschema = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name
***************
*** 6809,6814 ****
--- 6949,6955 ----
  					n->objectType = OBJECT_TSDICTIONARY;
  					n->object = $5;
  					n->newschema = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name
***************
*** 6817,6822 ****
--- 6958,6964 ----
  					n->objectType = OBJECT_TSTEMPLATE;
  					n->object = $5;
  					n->newschema = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name
***************
*** 6825,6830 ****
--- 6967,6973 ----
  					n->objectType = OBJECT_TSCONFIGURATION;
  					n->object = $5;
  					n->newschema = $8;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER SEQUENCE qualified_name SET SCHEMA name
***************
*** 6833,6838 ****
--- 6976,6991 ----
  					n->objectType = OBJECT_SEQUENCE;
  					n->relation = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name
+ 				{
+ 					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
+ 					n->objectType = OBJECT_SEQUENCE;
+ 					n->relation = $5;
+ 					n->newschema = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER VIEW qualified_name SET SCHEMA name
***************
*** 6841,6846 ****
--- 6994,7009 ----
  					n->objectType = OBJECT_VIEW;
  					n->relation = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name
+ 				{
+ 					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
+ 					n->objectType = OBJECT_VIEW;
+ 					n->relation = $5;
+ 					n->newschema = $8;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER FOREIGN TABLE relation_expr SET SCHEMA name
***************
*** 6849,6854 ****
--- 7012,7018 ----
  					n->objectType = OBJECT_FOREIGN_TABLE;
  					n->relation = $4;
  					n->newschema = $7;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  			| ALTER TYPE_P any_name SET SCHEMA name
***************
*** 6857,6862 ****
--- 7021,7027 ----
  					n->objectType = OBJECT_TYPE;
  					n->object = $3;
  					n->newschema = $6;
+ 					n->missing_ok = false;
  					$$ = (Node *)n;
  				}
  		;
*** ./src/backend/parser/parse_utilcmd.c.orig	2012-01-02 17:01:00.395650481 +0100
--- ./src/backend/parser/parse_utilcmd.c	2012-01-03 18:42:36.189435428 +0100
***************
*** 2285,2291 ****
  	 * new commands we add after this must not upgrade the lock level
  	 * requested here.
  	 */
! 	rel = relation_openrv(stmt->relation, lockmode);
  
  	/* Set up pstate and CreateStmtContext */
  	pstate = make_parsestate(NULL);
--- 2285,2299 ----
  	 * new commands we add after this must not upgrade the lock level
  	 * requested here.
  	 */
! 	rel = relation_openrv_extended(stmt->relation, lockmode, stmt->missing_ok);
! 	if (rel == NULL)
! 	{
! 		/* this message is consistent with relation_openrv */
! 		ereport(NOTICE,
! 				(errmsg("relation \"%s\" does not exist, skipping",
! 							stmt->relation->relname)));
! 		return NIL;
! 	}
  
  	/* Set up pstate and CreateStmtContext */
  	pstate = make_parsestate(NULL);
*** ./src/include/commands/tablecmds.h.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/include/commands/tablecmds.h	2012-01-03 20:02:37.791121635 +0100
***************
*** 33,39 ****
  extern void AlterTableInternal(Oid relid, List *cmds, bool recurse);
  
  extern void AlterTableNamespace(RangeVar *relation, const char *newschema,
! 					ObjectType stmttype, LOCKMODE lockmode);
  
  extern void AlterRelationNamespaceInternal(Relation classRel, Oid relOid,
  							   Oid oldNspOid, Oid newNspOid,
--- 33,40 ----
  extern void AlterTableInternal(Oid relid, List *cmds, bool recurse);
  
  extern void AlterTableNamespace(RangeVar *relation, const char *newschema,
! 					ObjectType stmttype, LOCKMODE lockmode,
! 									    bool missing_ok);
  
  extern void AlterRelationNamespaceInternal(Relation classRel, Oid relOid,
  							   Oid oldNspOid, Oid newNspOid,
*** ./src/include/nodes/parsenodes.h.orig	2012-01-02 17:01:00.599650468 +0100
--- ./src/include/nodes/parsenodes.h	2012-01-03 20:15:59.041069245 +0100
***************
*** 1171,1176 ****
--- 1171,1177 ----
  	RangeVar   *relation;		/* table to work on */
  	List	   *cmds;			/* list of subcommands */
  	ObjectType	relkind;		/* type of object */
+ 	bool	   missing_ok;		/* skip error if table missing */
  } AlterTableStmt;
  
  typedef enum AlterTableType
***************
*** 1806,1811 ****
--- 1807,1813 ----
  	NodeTag		type;
  	RangeVar   *sequence;		/* the sequence to alter */
  	List	   *options;
+ 	bool		missing_ok;		/* skip error if a role is missing? */
  } AlterSeqStmt;
  
  /* ----------------------
***************
*** 2116,2121 ****
--- 2118,2124 ----
  								 * trigger, etc) */
  	char	   *newname;		/* the new name */
  	DropBehavior behavior;		/* RESTRICT or CASCADE behavior */
+ 	bool		missing_ok;	/* skip error if missing? */
  } RenameStmt;
  
  /* ----------------------
***************
*** 2131,2136 ****
--- 2134,2140 ----
  	List	   *objarg;			/* argument types, if applicable */
  	char	   *addname;		/* additional name if needed */
  	char	   *newschema;		/* the new schema */
+ 	bool		missing_ok;	/* skip error if missing? */
  } AlterObjectSchemaStmt;
  
  /* ----------------------
*** ./src/test/regress/expected/alter_table.out.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/test/regress/expected/alter_table.out	2012-01-03 20:41:54.000000000 +0100
***************
*** 128,133 ****
--- 128,137 ----
  DROP TABLE tmp_new2;
  -- ALTER TABLE ... RENAME on non-table relations
  -- renaming indexes (FIXME: this should probably test the index's functionality)
+ ALTER INDEX IF EXISTS __onek_unique1 RENAME TO tmp_onek_unique1;
+ NOTICE:  relation "__onek_unique1" does not exist, skipping
+ ALTER INDEX IF EXISTS __tmp_onek_unique1 RENAME TO onek_unique1;
+ NOTICE:  relation "__tmp_onek_unique1" does not exist, skipping
  ALTER INDEX onek_unique1 RENAME TO tmp_onek_unique1;
  ALTER INDEX tmp_onek_unique1 RENAME TO onek_unique1;
  -- renaming views
***************
*** 2130,2132 ****
--- 2134,2150 ----
  DETAIL:  Failing row contains (null).
  DROP TABLE test_drop_constr_parent CASCADE;
  NOTICE:  drop cascades to table test_drop_constr_child
+ --
+ -- IF EXISTS test
+ --
+ ALTER TABLE IF EXISTS tt8 ADD COLUMN f int;
+ NOTICE:  relation "tt8" does not exist, skipping
+ CREATE TABLE tt8(a int);
+ ALTER TABLE IF EXISTS tt8 ADD COLUMN f int;
+ \d tt8
+       Table "public.tt8"
+  Column |  Type   | Modifiers 
+ --------+---------+-----------
+  a      | integer | 
+  f      | integer | 
+ 
*** ./src/test/regress/expected/sequence.out.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/test/regress/expected/sequence.out	2012-01-03 20:41:53.000000000 +0100
***************
*** 241,246 ****
--- 241,249 ----
  --
  -- Alter sequence
  --
+ ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 24
+ 	 INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
+ NOTICE:  relation "sequence_test2" does not exist, skipping
  CREATE SEQUENCE sequence_test2 START WITH 32;
  SELECT nextval('sequence_test2');
   nextval 
*** ./src/test/regress/sql/alter_table.sql.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/test/regress/sql/alter_table.sql	2012-01-03 20:41:35.207968887 +0100
***************
*** 166,171 ****
--- 166,174 ----
  
  -- ALTER TABLE ... RENAME on non-table relations
  -- renaming indexes (FIXME: this should probably test the index's functionality)
+ ALTER INDEX IF EXISTS __onek_unique1 RENAME TO tmp_onek_unique1;
+ ALTER INDEX IF EXISTS __tmp_onek_unique1 RENAME TO onek_unique1;
+ 
  ALTER INDEX onek_unique1 RENAME TO tmp_onek_unique1;
  ALTER INDEX tmp_onek_unique1 RENAME TO onek_unique1;
  -- renaming views
***************
*** 1463,1465 ****
--- 1466,1478 ----
  -- should fail
  INSERT INTO test_drop_constr_child (c) VALUES (NULL);
  DROP TABLE test_drop_constr_parent CASCADE;
+ 
+ 
+ --
+ -- IF EXISTS test
+ --
+ ALTER TABLE IF EXISTS tt8 ADD COLUMN f int;
+ 
+ CREATE TABLE tt8(a int);
+ ALTER TABLE IF EXISTS tt8 ADD COLUMN f int;
+ \d tt8
*** ./src/test/regress/sql/sequence.sql.orig	2012-01-02 17:01:00.000000000 +0100
--- ./src/test/regress/sql/sequence.sql	2012-01-03 18:12:02.702555250 +0100
***************
*** 113,118 ****
--- 113,122 ----
  --
  -- Alter sequence
  --
+ 
+ ALTER SEQUENCE IF EXISTS sequence_test2 RESTART WITH 24
+ 	 INCREMENT BY 4 MAXVALUE 36 MINVALUE 5 CYCLE;
+ 
  CREATE SEQUENCE sequence_test2 START WITH 32;
  
  SELECT nextval('sequence_test2');
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to