? GNUmakefile
? config.log
? config.status
? inherit_fkey.diff
? pre_upgrade.sql
? src/Makefile.global
? src/backend/postgres
? src/backend/catalog/postgres.bki
? src/backend/catalog/postgres.description
? src/backend/utils/mb/conversion_procs/conversion_create.sql
? src/backend/utils/mb/conversion_procs/ascii_and_mic/libascii_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/cyrillic_and_mic/libcyrillic_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_cn_and_mic/libeuc_cn_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/libeuc_jp_and_sjis.so.0.0
? src/backend/utils/mb/conversion_procs/euc_kr_and_mic/libeuc_kr_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/euc_tw_and_big5/libeuc_tw_and_big5.so.0.0
? src/backend/utils/mb/conversion_procs/latin2_and_win1250/liblatin2_and_win1250.so.0.0
? src/backend/utils/mb/conversion_procs/latin_and_mic/liblatin_and_mic.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_ascii/libutf8_and_ascii.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_big5/libutf8_and_big5.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/libutf8_and_cyrillic.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/libutf8_and_euc_cn.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/libutf8_and_euc_jp.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/libutf8_and_euc_kr.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/libutf8_and_euc_tw.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_gb18030/libutf8_and_gb18030.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_gbk/libutf8_and_gbk.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_iso8859/libutf8_and_iso8859.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/libutf8_and_iso8859_1.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_johab/libutf8_and_johab.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_sjis/libutf8_and_sjis.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_uhc/libutf8_and_uhc.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1250/libutf8_and_win1250.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1252/libutf8_and_win1252.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1256/libutf8_and_win1256.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win1258/libutf8_and_win1258.so.0.0
? src/backend/utils/mb/conversion_procs/utf8_and_win874/libutf8_and_win874.so.0.0
? src/bin/initdb/initdb
? src/bin/ipcclean/ipcclean
? src/bin/pg_config/pg_config
? src/bin/pg_controldata/pg_controldata
? src/bin/pg_ctl/pg_ctl
? src/bin/pg_dump/pg_dump
? src/bin/pg_dump/pg_dumpall
? src/bin/pg_dump/pg_restore
? src/bin/pg_resetxlog/pg_resetxlog
? src/bin/psql/psql
? src/bin/scripts/clusterdb
? src/bin/scripts/createdb
? src/bin/scripts/createlang
? src/bin/scripts/createuser
? src/bin/scripts/dropdb
? src/bin/scripts/droplang
? src/bin/scripts/dropuser
? src/bin/scripts/reindexdb
? src/bin/scripts/vacuumdb
? src/include/pg_config.h
? src/include/stamp-h
? src/interfaces/ecpg/compatlib/libecpg_compat.so.2.1
? src/interfaces/ecpg/ecpglib/libecpg.so.5.1
? src/interfaces/ecpg/pgtypeslib/libpgtypes.so.2.1
? src/interfaces/ecpg/preproc/ecpg
? src/interfaces/libpq/libpq.so.4.1
? src/pl/plpgsql/src/libplpgsql.so.1.0
? src/port/pg_config_paths.h
? src/test/regress/libregress.so.0.0
? src/test/regress/log
? src/test/regress/pg_regress
? src/test/regress/regression.diffs
? src/test/regress/regression.out
? src/test/regress/results
? src/test/regress/testtablespace
? src/test/regress/tmp_check
? src/test/regress/expected/constraints.out
? src/test/regress/expected/copy.out
? src/test/regress/expected/create_function_1.out
? src/test/regress/expected/create_function_2.out
? src/test/regress/expected/misc.out
? src/test/regress/expected/tablespace.out
? src/test/regress/sql/constraints.sql
? src/test/regress/sql/copy.sql
? src/test/regress/sql/create_function_1.sql
? src/test/regress/sql/create_function_2.sql
? src/test/regress/sql/misc.sql
? src/test/regress/sql/tablespace.sql
? src/timezone/zic
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/tablecmds.c,v
retrieving revision 1.174
diff -u -3 -p -u -r1.174 tablecmds.c
--- src/backend/commands/tablecmds.c	15 Oct 2005 02:49:15 -0000	1.174
+++ src/backend/commands/tablecmds.c	31 Oct 2005 01:09:24 -0000
@@ -4434,84 +4434,56 @@ CreateFKCheckTrigger(RangeVar *myRel, Fk
 }
 
 /*
- * Create the triggers that implement an FK constraint.
+ * This is a helper function for createForeignKeyTriggers.  It prepares a CreateTrigStmt
+ * object for calling CreateTrigger.
+ *   action_char must be either 'u' or 'd'
  */
-static void
-createForeignKeyTriggers(Relation rel, FkConstraint *fkconstraint,
-						 Oid constrOid)
+static CreateTrigStmt *
+prepareCreateTrigStmt(RangeVar * myRel, FkConstraint * fkconstraint, Oid constrOid, RangeVar * refRel, char action_char)
 {
-	RangeVar   *myRel;
 	CreateTrigStmt *fk_trigger;
 	ListCell   *fk_attr;
 	ListCell   *pk_attr;
-	ObjectAddress trigobj,
-				constrobj;
-
-	/*
-	 * Reconstruct a RangeVar for my relation (not passed in, unfortunately).
-	 */
-	myRel = makeRangeVar(get_namespace_name(RelationGetNamespace(rel)),
-						 pstrdup(RelationGetRelationName(rel)));
-
-	/*
-	 * Preset objectAddress fields
-	 */
-	constrobj.classId = ConstraintRelationId;
-	constrobj.objectId = constrOid;
-	constrobj.objectSubId = 0;
-	trigobj.classId = TriggerRelationId;
-	trigobj.objectSubId = 0;
 
-	/* Make changes-so-far visible */
-	CommandCounterIncrement();
+	Assert( (action_char=='u') || (action_char=='d') );
 
-	/*
-	 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the CHECK
-	 * action for both INSERTs and UPDATEs on the referencing table.
-	 */
-	CreateFKCheckTrigger(myRel, fkconstraint, &constrobj, &trigobj, true);
-	CreateFKCheckTrigger(myRel, fkconstraint, &constrobj, &trigobj, false);
-
-	/*
-	 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the ON
-	 * DELETE action on the referenced table.
-	 */
 	fk_trigger = makeNode(CreateTrigStmt);
 	fk_trigger->trigname = fkconstraint->constr_name;
-	fk_trigger->relation = fkconstraint->pktable;
+	fk_trigger->relation = refRel;
 	fk_trigger->before = false;
 	fk_trigger->row = true;
-	fk_trigger->actions[0] = 'd';
+	fk_trigger->actions[0] = action_char;
 	fk_trigger->actions[1] = '\0';
 
 	fk_trigger->isconstraint = true;
 	fk_trigger->constrrel = myRel;
-	switch (fkconstraint->fk_del_action)
+	char action = action_char == 'd' ? fkconstraint->fk_del_action : fkconstraint->fk_upd_action;
+	switch (action)
 	{
 		case FKCONSTR_ACTION_NOACTION:
 			fk_trigger->deferrable = fkconstraint->deferrable;
 			fk_trigger->initdeferred = fkconstraint->initdeferred;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_noaction_del");
+			fk_trigger->funcname = SystemFuncName(action_char == 'd' ? "RI_FKey_noaction_del" : "RI_FKey_noaction_upd");
 			break;
 		case FKCONSTR_ACTION_RESTRICT:
 			fk_trigger->deferrable = false;
 			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_restrict_del");
+			fk_trigger->funcname = SystemFuncName(action_char == 'd' ? "RI_FKey_restrict_del" : "RI_FKey_restrict_upd");
 			break;
 		case FKCONSTR_ACTION_CASCADE:
 			fk_trigger->deferrable = false;
 			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_cascade_del");
+			fk_trigger->funcname = SystemFuncName(action_char == 'd' ? "RI_FKey_cascade_del" : "RI_FKey_cascade_upd");
 			break;
 		case FKCONSTR_ACTION_SETNULL:
 			fk_trigger->deferrable = false;
 			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_setnull_del");
+			fk_trigger->funcname = SystemFuncName(action_char == 'd' ? "RI_FKey_setnull_del" : "RI_FKey_setnull_upd");
 			break;
 		case FKCONSTR_ACTION_SETDEFAULT:
 			fk_trigger->deferrable = false;
 			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_setdefault_del");
+			fk_trigger->funcname = SystemFuncName(action_char == 'd' ? "RI_FKey_setdefault_del" : "RI_FKey_setdefault_upd");
 			break;
 		default:
 			elog(ERROR, "unrecognized FK action type: %d",
@@ -4525,7 +4497,7 @@ createForeignKeyTriggers(Relation rel, F
 	fk_trigger->args = lappend(fk_trigger->args,
 							   makeString(myRel->relname));
 	fk_trigger->args = lappend(fk_trigger->args,
-							   makeString(fkconstraint->pktable->relname));
+							   makeString(refRel->relname));
 	fk_trigger->args = lappend(fk_trigger->args,
 				makeString(fkMatchTypeToString(fkconstraint->fk_matchtype)));
 	forboth(fk_attr, fkconstraint->fk_attrs,
@@ -4534,6 +4506,56 @@ createForeignKeyTriggers(Relation rel, F
 		fk_trigger->args = lappend(fk_trigger->args, lfirst(fk_attr));
 		fk_trigger->args = lappend(fk_trigger->args, lfirst(pk_attr));
 	}
+	return fk_trigger;
+}
+
+/*
+ * Create the triggers that implement an FK constraint.
+ */
+static void
+createForeignKeyTriggers(Relation rel, FkConstraint *fkconstraint,
+						 Oid constrOid)
+{
+	RangeVar   *myRel;
+	CreateTrigStmt *fk_trigger;
+	ObjectAddress trigobj,
+				constrobj;
+	List	   *children;
+	ListCell   *child;
+
+	/* this routine is actually in the planner */
+	children = find_all_inheritors(RangeVarGetRelid(fkconstraint->pktable, false));
+
+	/*
+	 * Reconstruct a RangeVar for my relation (not passed in, unfortunately).
+	 */
+	myRel = makeRangeVar(get_namespace_name(RelationGetNamespace(rel)),
+						 pstrdup(RelationGetRelationName(rel)));
+
+	/*
+	 * Preset objectAddress fields
+	 */
+	constrobj.classId = ConstraintRelationId;
+	constrobj.objectId = constrOid;
+	constrobj.objectSubId = 0;
+	trigobj.classId = TriggerRelationId;
+	trigobj.objectSubId = 0;
+
+	/* Make changes-so-far visible */
+	CommandCounterIncrement();
+
+	/*
+	 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the CHECK
+	 * action for both INSERTs and UPDATEs on the referencing table.
+	 */
+	CreateFKCheckTrigger(myRel, fkconstraint, &constrobj, &trigobj, true);
+	CreateFKCheckTrigger(myRel, fkconstraint, &constrobj, &trigobj, false);
+
+	/*
+	 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the ON
+	 * DELETE action on the referenced table.
+	 */
+	fk_trigger = prepareCreateTrigStmt(myRel,fkconstraint,constrOid,fkconstraint->pktable,'d');
 
 	trigobj.objectId = CreateTrigger(fk_trigger, true);
 
@@ -4547,68 +4569,71 @@ createForeignKeyTriggers(Relation rel, F
 	 * Build and execute a CREATE CONSTRAINT TRIGGER statement for the ON
 	 * UPDATE action on the referenced table.
 	 */
-	fk_trigger = makeNode(CreateTrigStmt);
-	fk_trigger->trigname = fkconstraint->constr_name;
-	fk_trigger->relation = fkconstraint->pktable;
-	fk_trigger->before = false;
-	fk_trigger->row = true;
-	fk_trigger->actions[0] = 'u';
-	fk_trigger->actions[1] = '\0';
-	fk_trigger->isconstraint = true;
-	fk_trigger->constrrel = myRel;
-	switch (fkconstraint->fk_upd_action)
-	{
-		case FKCONSTR_ACTION_NOACTION:
-			fk_trigger->deferrable = fkconstraint->deferrable;
-			fk_trigger->initdeferred = fkconstraint->initdeferred;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_noaction_upd");
-			break;
-		case FKCONSTR_ACTION_RESTRICT:
-			fk_trigger->deferrable = false;
-			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_restrict_upd");
-			break;
-		case FKCONSTR_ACTION_CASCADE:
-			fk_trigger->deferrable = false;
-			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_cascade_upd");
-			break;
-		case FKCONSTR_ACTION_SETNULL:
-			fk_trigger->deferrable = false;
-			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_setnull_upd");
-			break;
-		case FKCONSTR_ACTION_SETDEFAULT:
-			fk_trigger->deferrable = false;
-			fk_trigger->initdeferred = false;
-			fk_trigger->funcname = SystemFuncName("RI_FKey_setdefault_upd");
-			break;
-		default:
-			elog(ERROR, "unrecognized FK action type: %d",
-				 (int) fkconstraint->fk_upd_action);
-			break;
-	}
-
-	fk_trigger->args = NIL;
-	fk_trigger->args = lappend(fk_trigger->args,
-							   makeString(fkconstraint->constr_name));
-	fk_trigger->args = lappend(fk_trigger->args,
-							   makeString(myRel->relname));
-	fk_trigger->args = lappend(fk_trigger->args,
-							   makeString(fkconstraint->pktable->relname));
-	fk_trigger->args = lappend(fk_trigger->args,
-				makeString(fkMatchTypeToString(fkconstraint->fk_matchtype)));
-	forboth(fk_attr, fkconstraint->fk_attrs,
-			pk_attr, fkconstraint->pk_attrs)
-	{
-		fk_trigger->args = lappend(fk_trigger->args, lfirst(fk_attr));
-		fk_trigger->args = lappend(fk_trigger->args, lfirst(pk_attr));
-	}
+	fk_trigger = prepareCreateTrigStmt(myRel,fkconstraint,constrOid,fkconstraint->pktable,'u');
 
 	trigobj.objectId = CreateTrigger(fk_trigger, true);
 
 	/* Register dependency from trigger to constraint */
 	recordDependencyOn(&trigobj, &constrobj, DEPENDENCY_INTERNAL);
+
+	/* Make changes-so-far visible */
+	CommandCounterIncrement();
+
+	/*
+	* 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;
+		Relation childrel;
+		RangeVar * childrv;
+		ObjectAddress childrelobj;
+
+		childrelid = lfirst_oid(child);
+		childrel = relation_open(childrelid, AccessExclusiveLock);
+
+		childrv = makeRangeVar(get_namespace_name(RelationGetNamespace(childrel)),
+							pstrdup(RelationGetRelationName(childrel)));
+
+		/*
+		 * First, add a dependancy between the table and the constraint
+		 * This is done for the original(opposed to children) table
+		 * in CreateConstraintEntry 
+		 */
+		childrelobj.classId = RelationRelationId;
+		childrelobj.objectId = childrelid;
+		childrelobj.objectSubId = 0;
+
+		recordDependencyOn(&constrobj, &childrelobj, DEPENDENCY_NORMAL);
+
+		/*
+		 * Create the update trigger
+		 */
+		fk_trigger = prepareCreateTrigStmt(myRel,fkconstraint,constrOid,childrv,'u');
+		trigobj.objectId = CreateTrigger(fk_trigger, true);
+
+		/* Register dependency from trigger to constraint */
+		recordDependencyOn(&trigobj, &constrobj, DEPENDENCY_INTERNAL);
+
+		/* Make changes-so-far visible */
+		CommandCounterIncrement();
+
+		/*
+		 * Create the delete trigger
+		 */
+		fk_trigger = prepareCreateTrigStmt(myRel,fkconstraint,constrOid,childrv,'d');
+		trigobj.objectId = CreateTrigger(fk_trigger, true);
+
+		/* Register dependency from trigger to constraint */
+		recordDependencyOn(&trigobj, &constrobj, DEPENDENCY_INTERNAL);
+
+		/* Make changes-so-far visible */
+		CommandCounterIncrement();
+
+		relation_close(childrel, AccessExclusiveLock);
+	}
 }
 
 /*
Index: src/backend/utils/adt/ri_triggers.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v
retrieving revision 1.81
diff -u -3 -p -u -r1.81 ri_triggers.c
--- src/backend/utils/adt/ri_triggers.c	15 Oct 2005 02:49:29 -0000	1.81
+++ src/backend/utils/adt/ri_triggers.c	31 Oct 2005 01:09:24 -0000
@@ -266,7 +266,7 @@ RI_FKey_check(PG_FUNCTION_ARGS)
 			 * ----------
 			 */
 			quoteRelationName(pkrelname, pk_rel);
-			snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x FOR SHARE OF x",
+			snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x",
 					 pkrelname);
 
 			/* Prepare and save the plan */
@@ -399,7 +399,7 @@ RI_FKey_check(PG_FUNCTION_ARGS)
 		 * ----------
 		 */
 		quoteRelationName(pkrelname, pk_rel);
-		snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", pkrelname);
+		snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", pkrelname);
 		querysep = "WHERE";
 		for (i = 0; i < qkey.nkeypairs; i++)
 		{
@@ -411,7 +411,6 @@ RI_FKey_check(PG_FUNCTION_ARGS)
 			queryoids[i] = SPI_gettypeid(fk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_FK_IDX]);
 		}
-		strcat(querystr, " FOR SHARE OF x");
 
 		/* Prepare and save the plan */
 		qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -560,7 +559,7 @@ ri_Check_Pk_Match(Relation pk_rel, Relat
 		 * ----------
 		 */
 		quoteRelationName(pkrelname, pk_rel);
-		snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", pkrelname);
+		snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", pkrelname);
 		querysep = "WHERE";
 		for (i = 0; i < qkey.nkeypairs; i++)
 		{
@@ -572,7 +571,6 @@ ri_Check_Pk_Match(Relation pk_rel, Relat
 			queryoids[i] = SPI_gettypeid(pk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_PK_IDX]);
 		}
-		strcat(querystr, " FOR SHARE OF x");
 
 		/* Prepare and save the plan */
 		qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -716,7 +714,7 @@ RI_FKey_noaction_del(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", fkrelname);
+				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", fkrelname);
 				querysep = "WHERE";
 				for (i = 0; i < qkey.nkeypairs; i++)
 				{
@@ -728,7 +726,6 @@ RI_FKey_noaction_del(PG_FUNCTION_ARGS)
 					queryoids[i] = SPI_gettypeid(pk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_PK_IDX]);
 				}
-				strcat(querystr, " FOR SHARE OF x");
 
 				/* Prepare and save the plan */
 				qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -905,7 +902,7 @@ RI_FKey_noaction_upd(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", fkrelname);
+				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", fkrelname);
 				querysep = "WHERE";
 				for (i = 0; i < qkey.nkeypairs; i++)
 				{
@@ -917,7 +914,6 @@ RI_FKey_noaction_upd(PG_FUNCTION_ARGS)
 					queryoids[i] = SPI_gettypeid(pk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_PK_IDX]);
 				}
-				strcat(querystr, " FOR SHARE OF x");
 
 				/* Prepare and save the plan */
 				qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -1063,7 +1059,7 @@ RI_FKey_cascade_del(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "DELETE FROM ONLY %s", fkrelname);
+				snprintf(querystr, sizeof(querystr), "DELETE FROM %s", fkrelname);
 				querysep = "WHERE";
 				for (i = 0; i < qkey.nkeypairs; i++)
 				{
@@ -1239,7 +1235,7 @@ RI_FKey_cascade_upd(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "UPDATE ONLY %s SET", fkrelname);
+				snprintf(querystr, sizeof(querystr), "UPDATE %s SET", fkrelname);
 				qualstr[0] = '\0';
 				querysep = "";
 				qualsep = "WHERE";
@@ -1411,7 +1407,7 @@ RI_FKey_restrict_del(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", fkrelname);
+				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", fkrelname);
 				querysep = "WHERE";
 				for (i = 0; i < qkey.nkeypairs; i++)
 				{
@@ -1423,7 +1419,6 @@ RI_FKey_restrict_del(PG_FUNCTION_ARGS)
 					queryoids[i] = SPI_gettypeid(pk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_PK_IDX]);
 				}
-				strcat(querystr, " FOR SHARE OF x");
 
 				/* Prepare and save the plan */
 				qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -1590,7 +1585,7 @@ RI_FKey_restrict_upd(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM ONLY %s x", fkrelname);
+				snprintf(querystr, sizeof(querystr), "SELECT 1 FROM %s x", fkrelname);
 				querysep = "WHERE";
 				for (i = 0; i < qkey.nkeypairs; i++)
 				{
@@ -1602,7 +1597,6 @@ RI_FKey_restrict_upd(PG_FUNCTION_ARGS)
 					queryoids[i] = SPI_gettypeid(pk_rel->rd_att,
 										 qkey.keypair[i][RI_KEYPAIR_PK_IDX]);
 				}
-				strcat(querystr, " FOR SHARE OF x");
 
 				/* Prepare and save the plan */
 				qplan = ri_PlanCheck(querystr, qkey.nkeypairs, queryoids,
@@ -1751,7 +1745,7 @@ RI_FKey_setnull_del(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "UPDATE ONLY %s SET", fkrelname);
+				snprintf(querystr, sizeof(querystr), "UPDATE %s SET", fkrelname);
 				qualstr[0] = '\0';
 				querysep = "";
 				qualsep = "WHERE";
@@ -1951,7 +1945,7 @@ RI_FKey_setnull_upd(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "UPDATE ONLY %s SET", fkrelname);
+				snprintf(querystr, sizeof(querystr), "UPDATE %s SET", fkrelname);
 				qualstr[0] = '\0';
 				querysep = "";
 				qualsep = "WHERE";
@@ -2132,7 +2126,7 @@ RI_FKey_setdefault_del(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "UPDATE ONLY %s SET", fkrelname);
+				snprintf(querystr, sizeof(querystr), "UPDATE %s SET", fkrelname);
 				qualstr[0] = '\0';
 				querysep = "";
 				qualsep = "WHERE";
@@ -2324,7 +2318,7 @@ RI_FKey_setdefault_upd(PG_FUNCTION_ARGS)
 				 * ----------
 				 */
 				quoteRelationName(fkrelname, fk_rel);
-				snprintf(querystr, sizeof(querystr), "UPDATE ONLY %s SET", fkrelname);
+				snprintf(querystr, sizeof(querystr), "UPDATE %s SET", fkrelname);
 				qualstr[0] = '\0';
 				querysep = "";
 				qualsep = "WHERE";
@@ -2622,7 +2616,7 @@ RI_Initial_Check(FkConstraint *fkconstra
 	quoteRelationName(pkrelname, pkrel);
 	quoteRelationName(relname, rel);
 	snprintf(querystr + strlen(querystr), sizeof(querystr) - strlen(querystr),
-			 " FROM ONLY %s fk LEFT OUTER JOIN ONLY %s pk ON (",
+			 " FROM %s fk LEFT OUTER JOIN ONLY %s pk ON (",
 			 relname, pkrelname);
 
 	sep = "";
