Add GUC setting to make created tables default to WITHOUT - Mailing list pgsql-patches
From | Hans-Jürgen Schönig |
---|---|
Subject | Add GUC setting to make created tables default to WITHOUT |
Date | |
Msg-id | 3FBBC347.7070602@cybertec.at Whole thread Raw |
Responses |
Re: Add GUC setting to make created tables default to
|
List | pgsql-patches |
I have attaches a patch against 7.4.0 which contains the implementation of the following todo item. > Log message: > Add: > > > * Add GUC setting to make created tables > default to WITHOUT OIDS Cheers, Hans -- Cybertec Geschwinde u Schoenig Ludo-Hartmannplatz 1/14, A-1160 Vienna, Austria Tel: +43/2952/30706 or +43/660/816 40 77 www.cybertec.at, www.postgresql.at, kernel.cybertec.at *** ./doc/src/sgml/ref/create_table.sgml.orig 2003-11-19 18:28:41.000000000 +0100 --- ./doc/src/sgml/ref/create_table.sgml 2003-11-19 18:30:12.000000000 +0100 *************** *** 243,252 **** <listitem> <para> This optional clause specifies whether rows of the new table ! should have OIDs (object identifiers) assigned to them. The ! default is to have OIDs. (If the new table inherits from any tables that have OIDs, then <literal>WITH OIDS</> is forced even ! if the command says <literal>WITHOUT OIDS</>.) </para> <para> --- 243,254 ---- <listitem> <para> This optional clause specifies whether rows of the new table ! should have OIDs (object identifiers) assigned to them. The ! default behaviour of PostgrSQL can be defined with the help of a ! runtime variable (table_with_oid). ! If the new table inherits from any tables that have OIDs, then <literal>WITH OIDS</> is forced even ! if the command says <literal>WITHOUT OIDS</>. </para> <para> *** ./src/backend/commands/tablecmds.c.orig 2003-11-19 10:24:13.000000000 +0100 --- ./src/backend/commands/tablecmds.c 2003-11-19 18:23:13.000000000 +0100 *************** *** 52,57 **** --- 52,58 ---- #include "utils/acl.h" #include "utils/builtins.h" #include "utils/fmgroids.h" + #include "utils/guc.h" #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/relcache.h" *************** *** 250,257 **** */ descriptor = BuildDescForRelation(schema); ! descriptor->tdhasoid = (stmt->hasoids || parentHasOids); ! if (old_constraints != NIL) { ConstrCheck *check = (ConstrCheck *) palloc(length(old_constraints) * --- 251,273 ---- */ descriptor = BuildDescForRelation(schema); ! /* it is time to decide whether the table we are about to ! * generate contains an OID or not. several cases have to be ! * taken into consideration. we will need an oid if: ! * a. the parent table has an oid ! * b. the user has not defined WITH/OUT OID explicity but has ! * set "table_with_oid" to "true" ! * c. the user tells us to use an OID - no matter if ! * table_with_oid is set or not ! */ ! if (parentHasOids || stmt->hasoids == WITH_OID || ! (stmt->hasoids == EMPTY_OID && table_with_oid == true)) ! { ! descriptor->tdhasoid = true; ! } ! else ! descriptor->tdhasoid = false; ! if (old_constraints != NIL) { ConstrCheck *check = (ConstrCheck *) palloc(length(old_constraints) * *** ./src/backend/nodes/outfuncs.c.orig 2003-11-19 10:37:59.000000000 +0100 --- ./src/backend/nodes/outfuncs.c 2003-11-19 10:38:14.000000000 +0100 *************** *** 1101,1107 **** WRITE_NODE_FIELD(tableElts); WRITE_NODE_FIELD(inhRelations); WRITE_NODE_FIELD(constraints); ! WRITE_BOOL_FIELD(hasoids); WRITE_ENUM_FIELD(oncommit, OnCommitAction); } --- 1101,1107 ---- WRITE_NODE_FIELD(tableElts); WRITE_NODE_FIELD(inhRelations); WRITE_NODE_FIELD(constraints); ! WRITE_INT_FIELD(hasoids); WRITE_ENUM_FIELD(oncommit, OnCommitAction); } *** ./src/backend/parser/gram.y.orig 2003-11-19 10:54:02.000000000 +0100 --- ./src/backend/parser/gram.y 2003-11-19 16:21:17.000000000 +0100 *************** *** 234,240 **** %type <defelt> createfunc_opt_item %type <typnam> func_arg func_return func_type aggr_argtype ! %type <boolean> opt_arg TriggerForType OptTemp OptWithOids %type <oncommit> OnCommitOption %type <list> for_update_clause opt_for_update_clause update_list --- 234,241 ---- %type <defelt> createfunc_opt_item %type <typnam> func_arg func_return func_type aggr_argtype ! %type <ival> OptWithOids ! %type <boolean> opt_arg TriggerForType OptTemp %type <oncommit> OnCommitOption %type <list> for_update_clause opt_for_update_clause update_list *************** *** 1840,1848 **** ; OptWithOids: ! WITH OIDS { $$ = TRUE; } ! | WITHOUT OIDS { $$ = FALSE; } ! | /*EMPTY*/ { $$ = TRUE; } ; OnCommitOption: ON COMMIT DROP { $$ = ONCOMMIT_DROP; } --- 1841,1849 ---- ; OptWithOids: ! WITH OIDS { $$ = WITH_OID; } ! | WITHOUT OIDS { $$ = WITHOUT_OID; } ! | /*EMPTY*/ { $$ = EMPTY_OID; } ; OnCommitOption: ON COMMIT DROP { $$ = ONCOMMIT_DROP; } *** ./src/backend/utils/misc/guc.c.orig 2003-11-19 12:19:19.000000000 +0100 --- ./src/backend/utils/misc/guc.c 2003-11-19 18:36:31.000000000 +0100 *************** *** 103,108 **** --- 103,111 ---- #ifdef USE_ASSERT_CHECKING bool assert_enabled = true; #endif + + bool table_with_oid = true; + bool log_statement = false; bool log_duration = false; bool Debug_print_plan = false; *************** *** 481,486 **** --- 484,497 ---- false, NULL, NULL }, { + {"table_with_oid", PGC_USERSET, CLIENT_CONN_STATEMENT, + gettext_noop("Tells us whether we want OIDs or not."), + NULL + }, + &table_with_oid, + false, NULL, NULL + }, + { {"log_connections", PGC_BACKEND, LOGGING_WHAT, gettext_noop("Logs each successful connection."), NULL *** ./src/backend/utils/misc/postgresql.conf.sample.orig 2003-11-19 18:37:24.000000000 +0100 --- ./src/backend/utils/misc/postgresql.conf.sample 2003-11-19 18:37:33.000000000 +0100 *************** *** 210,215 **** --- 210,216 ---- #default_transaction_isolation = 'read committed' #default_transaction_read_only = false #statement_timeout = 0 # 0 is disabled, in milliseconds + #table_with_oid = true # - Locale and Formatting - *** ./src/bin/psql/tab-complete.c.orig 2003-11-19 12:29:38.000000000 +0100 --- ./src/bin/psql/tab-complete.c 2003-11-19 12:29:46.000000000 +0100 *************** *** 562,567 **** --- 562,568 ---- "syslog", "syslog_facility", "syslog_ident", + "table_with_oid", "tcpip_socket", "TimeZone", "trace_notify", *** ./src/include/nodes/parsenodes.h.orig 2003-11-19 12:03:19.000000000 +0100 --- ./src/include/nodes/parsenodes.h 2003-11-19 16:20:02.000000000 +0100 *************** *** 916,921 **** --- 916,926 ---- OnCommitAction oncommit; /* what do we do at COMMIT? */ } CreateStmt; + /* needed for WITH/OUT OIDs in CREATE TABLE statements */ + #define WITHOUT_OID 0 + #define EMPTY_OID 1 + #define WITH_OID 2 + /* ---------- * Definitions for plain (non-FOREIGN KEY) constraints in CreateStmt * *** ./src/include/utils/guc.h.orig 2003-11-19 12:18:50.000000000 +0100 --- ./src/include/utils/guc.h 2003-11-19 13:18:57.000000000 +0100 *************** *** 106,111 **** --- 106,112 ---- extern bool log_statement_stats; extern bool log_btree_build_stats; + extern bool table_with_oid; extern bool SQL_inheritance; extern bool Australian_timezones;
pgsql-patches by date: