diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index b6b20a368ec..8d7b3bfd663 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7394,36 +7394,6 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
-
- sql_inheritance (boolean)
-
- sql_inheritance> configuration parameter
-
- inheritance>>
-
-
-
- This setting controls whether undecorated table references are
- considered to include inheritance child tables. The default is
- on>, which means child tables are included (thus,
- a *> suffix is assumed by default). If turned
- off>, child tables are not included (thus, an
- ONLY prefix is assumed). The SQL standard
- requires child tables to be included, so the off> setting
- is not spec-compliant, but it is provided for compatibility with
- PostgreSQL> releases prior to 7.1.
- See for more information.
-
-
-
- Turning sql_inheritance> off is deprecated, because that
- behavior has been found to be error-prone as well as contrary to SQL
- standard. Discussions of inheritance behavior elsewhere in this
- manual generally assume that it is on>.
-
-
-
-
standard_conforming_strings (boolean)
strings>standard conforming>>
diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml
index 7e1bc0e5341..d7117cbc8f8 100644
--- a/doc/src/sgml/ddl.sgml
+++ b/doc/src/sgml/ddl.sgml
@@ -2529,11 +2529,9 @@ SELECT name, altitude
WHERE altitude > 500;
- Writing *> is not necessary, since this behavior is
- the default (unless you have changed the setting of the
- configuration option).
- However writing *> might be useful to emphasize that
- additional tables will be searched.
+ Writing *> is not necessary, since this behavior is always
+ the default. However, this syntax is still supported for
+ compatibility with older releases where the default could be changed.
diff --git a/doc/src/sgml/queries.sgml b/doc/src/sgml/queries.sgml
index 5cc6dbce11b..0f84c12bec6 100644
--- a/doc/src/sgml/queries.sgml
+++ b/doc/src/sgml/queries.sgml
@@ -145,11 +145,9 @@ FROM table_reference , table_r
Instead of writing ONLY> before the table name, you can write
*> after the table name to explicitly specify that descendant
- tables are included. Writing *> is not necessary since that
- behavior is the default (unless you have changed the setting of the configuration option). However writing
- *> might be useful to emphasize that additional tables will be
- searched.
+ tables are included. There is no real reason to use this syntax any more,
+ because searching descendent tables is now always the default behavior.
+ However, it is supported for compatibility with older releases.
diff --git a/src/backend/commands/lockcmds.c b/src/backend/commands/lockcmds.c
index 9e62e00b8dc..ba1414ba645 100644
--- a/src/backend/commands/lockcmds.c
+++ b/src/backend/commands/lockcmds.c
@@ -54,7 +54,7 @@ LockTableCommand(LockStmt *lockstmt)
foreach(p, lockstmt->relations)
{
RangeVar *rv = (RangeVar *) lfirst(p);
- bool recurse = interpretInhOption(rv->inhOpt);
+ bool recurse = (rv->inhOpt == INH_YES);
Oid reloid;
reloid = RangeVarGetRelidExtended(rv, lockstmt->mode, false,
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index ee79b726f2e..13b12f19035 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -1184,7 +1184,7 @@ ExecuteTruncate(TruncateStmt *stmt)
{
RangeVar *rv = lfirst(cell);
Relation rel;
- bool recurse = interpretInhOption(rv->inhOpt);
+ bool recurse = (rv->inhOpt == INH_YES);
Oid myrelid;
rel = heap_openrv(rv, AccessExclusiveLock);
@@ -2655,7 +2655,7 @@ renameatt(RenameStmt *stmt)
renameatt_internal(relid,
stmt->subname, /* old att name */
stmt->newname, /* new att name */
- interpretInhOption(stmt->relation->inhOpt), /* recursive? */
+ (stmt->relation->inhOpt == INH_YES), /* recursive? */
false, /* recursing? */
0, /* expected inhcount */
stmt->behavior);
@@ -2807,7 +2807,7 @@ RenameConstraint(RenameStmt *stmt)
rename_constraint_internal(relid, typid,
stmt->subname,
stmt->newname,
- stmt->relation ? interpretInhOption(stmt->relation->inhOpt) : false, /* recursive? */
+ (stmt->relation && stmt->relation->inhOpt == INH_YES), /* recursive? */
false, /* recursing? */
0 /* expected inhcount */ );
@@ -3050,7 +3050,7 @@ AlterTable(Oid relid, LOCKMODE lockmode, AlterTableStmt *stmt)
CheckTableNotInUse(rel, "ALTER TABLE");
ATController(stmt,
- rel, stmt->cmds, interpretInhOption(stmt->relation->inhOpt),
+ rel, stmt->cmds, (stmt->relation->inhOpt == INH_YES),
lockmode);
}
diff --git a/src/backend/nodes/makefuncs.c b/src/backend/nodes/makefuncs.c
index 20e2dbda797..b64f7c6a852 100644
--- a/src/backend/nodes/makefuncs.c
+++ b/src/backend/nodes/makefuncs.c
@@ -423,7 +423,7 @@ makeRangeVar(char *schemaname, char *relname, int location)
r->catalogname = NULL;
r->schemaname = schemaname;
r->relname = relname;
- r->inhOpt = INH_DEFAULT;
+ r->inhOpt = INH_YES;
r->relpersistence = RELPERSISTENCE_PERMANENT;
r->alias = NULL;
r->location = location;
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 5e65fe75bd5..601e22abfa3 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -380,7 +380,7 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt)
/* set up range table with just the result rel */
qry->resultRelation = setTargetTable(pstate, stmt->relation,
- interpretInhOption(stmt->relation->inhOpt),
+ (stmt->relation->inhOpt == INH_YES),
true,
ACL_DELETE);
@@ -2177,7 +2177,7 @@ transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt)
}
qry->resultRelation = setTargetTable(pstate, stmt->relation,
- interpretInhOption(stmt->relation->inhOpt),
+ (stmt->relation->inhOpt == INH_YES),
true,
ACL_UPDATE);
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 2ed7b5259d0..931bc9aca68 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -28,12 +28,11 @@
* current transaction and are just parsing commands to find the next
* ROLLBACK or COMMIT. If you make use of SET variables, then you
* will do the wrong thing in multi-query strings like this:
- * SET SQL_inheritance TO off; SELECT * FROM foo;
+ * SET constraint_exclusion TO off; SELECT * FROM foo;
* because the entire string is parsed by gram.y before the SET gets
* executed. Anything that depends on the database or changeable state
* should be handled during parse analysis so that it happens at the
- * right time not the wrong time. The handling of SQL_inheritance is
- * a good example.
+ * right time not the wrong time.
*
* WARNINGS
* If you use a list, make sure the datum is a node so that the printing
@@ -11249,9 +11248,9 @@ join_qual: USING '(' name_list ')' { $$ = (Node *) $3; }
relation_expr:
qualified_name
{
- /* default inheritance */
+ /* inheritance query, implicitly */
$$ = $1;
- $$->inhOpt = INH_DEFAULT;
+ $$->inhOpt = INH_YES;
$$->alias = NULL;
}
| qualified_name '*'
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c
index 751de4bddb5..a96b3f92809 100644
--- a/src/backend/parser/parse_clause.c
+++ b/src/backend/parser/parse_clause.c
@@ -228,30 +228,6 @@ setTargetTable(ParseState *pstate, RangeVar *relation,
return rtindex;
}
-/*
- * Simplify InhOption (yes/no/default) into boolean yes/no.
- *
- * The reason we do things this way is that we don't want to examine the
- * SQL_inheritance option flag until parse_analyze() is run. Otherwise,
- * we'd do the wrong thing with query strings that intermix SET commands
- * with queries.
- */
-bool
-interpretInhOption(InhOption inhOpt)
-{
- switch (inhOpt)
- {
- case INH_NO:
- return false;
- case INH_YES:
- return true;
- case INH_DEFAULT:
- return SQL_inheritance;
- }
- elog(ERROR, "bogus InhOption value: %d", inhOpt);
- return false; /* keep compiler quiet */
-}
-
/*
* Given a relation-options list (of DefElems), return true iff the specified
* table/result set should be created with OIDs. This needs to be done after
@@ -437,7 +413,7 @@ transformTableEntry(ParseState *pstate, RangeVar *r)
/* We need only build a range table entry */
rte = addRangeTableEntry(pstate, r, r->alias,
- interpretInhOption(r->inhOpt), true);
+ (r->inhOpt == INH_YES), true);
return rte;
}
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index a02511754e9..946ba9e73eb 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -440,7 +440,6 @@ char *event_source;
bool row_security;
bool check_function_bodies = true;
bool default_with_oids = false;
-bool SQL_inheritance = true;
int log_min_error_statement = ERROR;
int log_min_messages = WARNING;
@@ -1321,15 +1320,6 @@ static struct config_bool ConfigureNamesBool[] =
false,
NULL, NULL, NULL
},
- {
- {"sql_inheritance", PGC_USERSET, COMPAT_OPTIONS_PREVIOUS,
- gettext_noop("Causes subtables to be included by default in various commands."),
- NULL
- },
- &SQL_inheritance,
- true,
- NULL, NULL, NULL
- },
{
{"transform_null_equals", PGC_USERSET, COMPAT_OPTIONS_CLIENT,
gettext_noop("Treats \"expr=NULL\" as \"expr IS NULL\"."),
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 2c638b2c097..ee8232f2f40 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -606,7 +606,6 @@
#lo_compat_privileges = off
#operator_precedence_warning = off
#quote_all_identifiers = off
-#sql_inheritance = on
#standard_conforming_strings = on
#synchronize_seqscans = on
diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h
index 65510b010ba..d11f1120b0a 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -45,8 +45,7 @@ typedef struct Alias
typedef enum InhOption
{
INH_NO, /* Do NOT scan child tables */
- INH_YES, /* DO scan child tables */
- INH_DEFAULT /* Use current SQL_inheritance option */
+ INH_YES /* DO scan child tables */
} InhOption;
/* What to do at commit time for temporary relations */
diff --git a/src/include/parser/parse_clause.h b/src/include/parser/parse_clause.h
index d04ce1125ca..549bde43b68 100644
--- a/src/include/parser/parse_clause.h
+++ b/src/include/parser/parse_clause.h
@@ -19,7 +19,6 @@
extern void transformFromClause(ParseState *pstate, List *frmList);
extern int setTargetTable(ParseState *pstate, RangeVar *relation,
bool inh, bool alsoSource, AclMode requiredPerms);
-extern bool interpretInhOption(InhOption inhOpt);
extern bool interpretOidsOption(List *defList, bool allowOids);
extern Node *transformWhereClause(ParseState *pstate, Node *clause,
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 0bf9f210678..66a3915e8a0 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -244,7 +244,6 @@ extern bool log_btree_build_stats;
extern PGDLLIMPORT bool check_function_bodies;
extern bool default_with_oids;
-extern bool SQL_inheritance;
extern int log_min_error_statement;
extern int log_min_messages;