Dimitri Fontaine <dimi...@2ndquadrant.fr> writes:
>   make -C contrib/citext install
>   psql -f .../head/share/contrib/citext.sql
>   psql
>   dim=# do $$ begin execute 'alter operator class public.citext_ops using 
> btree set schema utils'; end; $$;
> server closed the connection unexpectedly
>       This probably means the server terminated abnormally
>       before or while processing the request.
> The connection to the server was lost. Attempting reset: Failed.

The fix was ok, but I had to test with the right environment to be able
to appreciate that :)

Please find it attached.

Regards,
-- 
Dimitri Fontaine
http://2ndQuadrant.fr     PostgreSQL : Expertise, Formation et Support

*** a/src/backend/commands/alter.c
--- b/src/backend/commands/alter.c
***************
*** 198,208 **** ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
  			break;
  
  		case OBJECT_OPCLASS:
! 			AlterOpClassNamespace(stmt->object, stmt->objarg, stmt->newschema);
  			break;
  
  		case OBJECT_OPFAMILY:
! 			AlterOpFamilyNamespace(stmt->object, stmt->objarg, stmt->newschema);
  			break;
  
  		case OBJECT_SEQUENCE:
--- 198,208 ----
  			break;
  
  		case OBJECT_OPCLASS:
! 			AlterOpClassNamespace(stmt->object, stmt->addname, stmt->newschema);
  			break;
  
  		case OBJECT_OPFAMILY:
! 			AlterOpFamilyNamespace(stmt->object, stmt->addname, stmt->newschema);
  			break;
  
  		case OBJECT_SEQUENCE:
*** a/src/backend/commands/opclasscmds.c
--- b/src/backend/commands/opclasscmds.c
***************
*** 1993,2008 **** AlterOpClassOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
   * ALTER OPERATOR CLASS any_name USING access_method SET SCHEMA name
   */
  void
! AlterOpClassNamespace(List *name, List *argam, const char *newschema)
  {
  	Oid			amOid;
- 	char       *access_method = linitial(argam);
  	Relation	rel;
  	Oid			oid;
  	Oid			nspOid;
  
- 	Assert(list_length(argam) == 1);
- 
  	amOid = get_am_oid(access_method, false);
  
  	rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
--- 1993,2005 ----
   * ALTER OPERATOR CLASS any_name USING access_method SET SCHEMA name
   */
  void
! AlterOpClassNamespace(List *name, char *access_method, const char *newschema)
  {
  	Oid			amOid;
  	Relation	rel;
  	Oid			oid;
  	Oid			nspOid;
  
  	amOid = get_am_oid(access_method, false);
  
  	rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
***************
*** 2185,2199 **** get_am_oid(const char *amname, bool missing_ok)
   * ALTER OPERATOR FAMILY any_name USING access_method SET SCHEMA name
   */
  void
! AlterOpFamilyNamespace(List *name, List *argam, const char *newschema)
  {
  	Oid			amOid;
- 	char       *access_method = linitial(argam);
  	Relation	rel;
  	Oid			nspOid;
  	Oid			oid;
  
- 	Assert(list_length(argam) == 1);
  	amOid = get_am_oid(access_method, false);
  
  	rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
--- 2182,2194 ----
   * ALTER OPERATOR FAMILY any_name USING access_method SET SCHEMA name
   */
  void
! AlterOpFamilyNamespace(List *name, char *access_method, const char *newschema)
  {
  	Oid			amOid;
  	Relation	rel;
  	Oid			nspOid;
  	Oid			oid;
  
  	amOid = get_am_oid(access_method, false);
  
  	rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
*** a/src/backend/parser/gram.y
--- b/src/backend/parser/gram.y
***************
*** 6225,6231 **** AlterObjectSchemaStmt:
  					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
  					n->objectType = OBJECT_OPCLASS;
  					n->object = $4;
! 					n->objarg = list_make1($6);
  					n->newschema = $9;
  					$$ = (Node *)n;
  				}
--- 6225,6231 ----
  					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
  					n->objectType = OBJECT_OPCLASS;
  					n->object = $4;
! 					n->addname = $6;
  					n->newschema = $9;
  					$$ = (Node *)n;
  				}
***************
*** 6234,6240 **** AlterObjectSchemaStmt:
  					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
  					n->objectType = OBJECT_OPFAMILY;
  					n->object = $4;
! 					n->objarg = list_make1($6);
  					n->newschema = $9;
  					$$ = (Node *)n;
  				}
--- 6234,6240 ----
  					AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
  					n->objectType = OBJECT_OPFAMILY;
  					n->object = $4;
! 					n->addname = $6;
  					n->newschema = $9;
  					$$ = (Node *)n;
  				}
*** a/src/include/commands/defrem.h
--- b/src/include/commands/defrem.h
***************
*** 101,111 **** extern void RenameOpClass(List *name, const char *access_method, const char *new
  extern void RenameOpFamily(List *name, const char *access_method, const char *newname);
  extern void AlterOpClassOwner(List *name, const char *access_method, Oid newOwnerId);
  extern void AlterOpClassOwner_oid(Oid opclassOid, Oid newOwnerId);
! extern void AlterOpClassNamespace(List *name, List *argam, const char *newschema);
  extern void AlterOpFamilyOwner(List *name, const char *access_method, Oid newOwnerId);
  extern void AlterOpFamilyOwner_oid(Oid opfamilyOid, Oid newOwnerId);
  extern Oid get_am_oid(const char *amname, bool missing_ok);
! extern void AlterOpFamilyNamespace(List *name, List *argam, const char *newschema);
  
  /* commands/tsearchcmds.c */
  extern void DefineTSParser(List *names, List *parameters);
--- 101,111 ----
  extern void RenameOpFamily(List *name, const char *access_method, const char *newname);
  extern void AlterOpClassOwner(List *name, const char *access_method, Oid newOwnerId);
  extern void AlterOpClassOwner_oid(Oid opclassOid, Oid newOwnerId);
! extern void AlterOpClassNamespace(List *name, char *access_method, const char *newschema);
  extern void AlterOpFamilyOwner(List *name, const char *access_method, Oid newOwnerId);
  extern void AlterOpFamilyOwner_oid(Oid opfamilyOid, Oid newOwnerId);
  extern Oid get_am_oid(const char *amname, bool missing_ok);
! extern void AlterOpFamilyNamespace(List *name, char *access_method, const char *newschema);
  
  /* commands/tsearchcmds.c */
  extern void DefineTSParser(List *names, List *parameters);
-- 
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