diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index b6b20a368e..8d7b3bfd66 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) stringsstandard conforming diff --git a/doc/src/sgml/ddl.sgml b/doc/src/sgml/ddl.sgml index 7e1bc0e534..d7117cbc8f 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 5cc6dbce11..0f84c12bec 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 9e62e00b8d..ba1414ba64 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 ee79b726f2..13b12f1903 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 20e2dbda79..b64f7c6a85 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 5e65fe75bd..601e22abfa 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 2ed7b5259d..931bc9aca6 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 751de4bddb..a96b3f9280 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 a02511754e..946ba9e73e 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 2c638b2c09..ee8232f2f4 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 65510b010b..d11f1120b0 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 d04ce1125c..549bde43b6 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 0bf9f21067..66a3915e8a 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;