mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
pgindent run for 9.4
This includes removing tabs after periods in C comments, which was applied to back branches, so this change should not effect backpatching.
This commit is contained in:
@ -276,7 +276,7 @@ static void AlterSeqNamespaces(Relation classRel, Relation rel,
|
||||
Oid oldNspOid, Oid newNspOid, ObjectAddresses *objsMoved,
|
||||
LOCKMODE lockmode);
|
||||
static void ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd,
|
||||
bool recurse, bool recursing, LOCKMODE lockmode);
|
||||
bool recurse, bool recursing, LOCKMODE lockmode);
|
||||
static void ATExecValidateConstraint(Relation rel, char *constrName,
|
||||
bool recurse, bool recursing, LOCKMODE lockmode);
|
||||
static int transformColumnNameList(Oid relId, List *colList,
|
||||
@ -557,7 +557,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId)
|
||||
&inheritOids, &old_constraints, &parentOidCount);
|
||||
|
||||
/*
|
||||
* Create a tuple descriptor from the relation schema. Note that this
|
||||
* Create a tuple descriptor from the relation schema. Note that this
|
||||
* deals with column names, types, and NOT NULL constraints, but not
|
||||
* default values or CHECK constraints; we handle those below.
|
||||
*/
|
||||
@ -657,7 +657,7 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId)
|
||||
CommandCounterIncrement();
|
||||
|
||||
/*
|
||||
* Open the new relation and acquire exclusive lock on it. This isn't
|
||||
* Open the new relation and acquire exclusive lock on it. This isn't
|
||||
* really necessary for locking out other backends (since they can't see
|
||||
* the new rel anyway until we commit), but it keeps the lock manager from
|
||||
* complaining about deadlock risks.
|
||||
@ -702,7 +702,7 @@ DropErrorMsgNonExistent(RangeVar *rel, char rightkind, bool missing_ok)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_SCHEMA),
|
||||
errmsg("schema \"%s\" does not exist", rel->schemaname)));
|
||||
errmsg("schema \"%s\" does not exist", rel->schemaname)));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1022,10 +1022,10 @@ ExecuteTruncate(TruncateStmt *stmt)
|
||||
}
|
||||
|
||||
/*
|
||||
* In CASCADE mode, suck in all referencing relations as well. This
|
||||
* In CASCADE mode, suck in all referencing relations as well. This
|
||||
* requires multiple iterations to find indirectly-dependent relations. At
|
||||
* each phase, we need to exclusive-lock new rels before looking for their
|
||||
* dependencies, else we might miss something. Also, we check each rel as
|
||||
* dependencies, else we might miss something. Also, we check each rel as
|
||||
* soon as we open it, to avoid a faux pas such as holding lock for a long
|
||||
* time on a rel we have no permissions for.
|
||||
*/
|
||||
@ -1246,7 +1246,7 @@ ExecuteTruncate(TruncateStmt *stmt)
|
||||
}
|
||||
|
||||
/*
|
||||
* Check that a given rel is safe to truncate. Subroutine for ExecuteTruncate
|
||||
* Check that a given rel is safe to truncate. Subroutine for ExecuteTruncate
|
||||
*/
|
||||
static void
|
||||
truncate_check_rel(Relation rel)
|
||||
@ -1674,7 +1674,7 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
|
||||
|
||||
/*
|
||||
* Now copy the CHECK constraints of this parent, adjusting attnos
|
||||
* using the completed newattno[] map. Identically named constraints
|
||||
* using the completed newattno[] map. Identically named constraints
|
||||
* are merged if possible, else we throw error.
|
||||
*/
|
||||
if (constr && constr->num_check > 0)
|
||||
@ -1735,7 +1735,7 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
|
||||
|
||||
/*
|
||||
* Close the parent rel, but keep our AccessShareLock on it until xact
|
||||
* commit. That will prevent someone else from deleting or ALTERing
|
||||
* commit. That will prevent someone else from deleting or ALTERing
|
||||
* the parent before the child is committed.
|
||||
*/
|
||||
heap_close(relation, NoLock);
|
||||
@ -2243,7 +2243,7 @@ renameatt_internal(Oid myrelid,
|
||||
oldattname)));
|
||||
|
||||
/*
|
||||
* if the attribute is inherited, forbid the renaming. if this is a
|
||||
* if the attribute is inherited, forbid the renaming. if this is a
|
||||
* top-level call to renameatt(), then expected_parents will be 0, so the
|
||||
* effect of this code will be to prohibit the renaming if the attribute
|
||||
* is inherited at all. if this is a recursive call to renameatt(),
|
||||
@ -2547,7 +2547,7 @@ RenameRelationInternal(Oid myrelid, const char *newrelname, bool is_internal)
|
||||
newrelname)));
|
||||
|
||||
/*
|
||||
* Update pg_class tuple with new relname. (Scribbling on reltup is OK
|
||||
* Update pg_class tuple with new relname. (Scribbling on reltup is OK
|
||||
* because it's a copy...)
|
||||
*/
|
||||
namestrcpy(&(relform->relname), newrelname);
|
||||
@ -2603,7 +2603,7 @@ RenameRelationInternal(Oid myrelid, const char *newrelname, bool is_internal)
|
||||
* We also reject these commands if there are any pending AFTER trigger events
|
||||
* for the rel. This is certainly necessary for the rewriting variants of
|
||||
* ALTER TABLE, because they don't preserve tuple TIDs and so the pending
|
||||
* events would try to fetch the wrong tuples. It might be overly cautious
|
||||
* events would try to fetch the wrong tuples. It might be overly cautious
|
||||
* in other cases, but again it seems better to err on the side of paranoia.
|
||||
*
|
||||
* REINDEX calls this with "rel" referencing the index to be rebuilt; here
|
||||
@ -2659,23 +2659,23 @@ AlterTableLookupRelation(AlterTableStmt *stmt, LOCKMODE lockmode)
|
||||
* 3. Scan table(s) to check new constraints, and optionally recopy
|
||||
* the data into new table(s).
|
||||
* Phase 3 is not performed unless one or more of the subcommands requires
|
||||
* it. The intention of this design is to allow multiple independent
|
||||
* it. The intention of this design is to allow multiple independent
|
||||
* updates of the table schema to be performed with only one pass over the
|
||||
* data.
|
||||
*
|
||||
* ATPrepCmd performs phase 1. A "work queue" entry is created for
|
||||
* ATPrepCmd performs phase 1. A "work queue" entry is created for
|
||||
* each table to be affected (there may be multiple affected tables if the
|
||||
* commands traverse a table inheritance hierarchy). Also we do preliminary
|
||||
* validation of the subcommands, including parse transformation of those
|
||||
* expressions that need to be evaluated with respect to the old table
|
||||
* schema.
|
||||
*
|
||||
* ATRewriteCatalogs performs phase 2 for each affected table. (Note that
|
||||
* ATRewriteCatalogs performs phase 2 for each affected table. (Note that
|
||||
* phases 2 and 3 normally do no explicit recursion, since phase 1 already
|
||||
* did it --- although some subcommands have to recurse in phase 2 instead.)
|
||||
* Certain subcommands need to be performed before others to avoid
|
||||
* unnecessary conflicts; for example, DROP COLUMN should come before
|
||||
* ADD COLUMN. Therefore phase 1 divides the subcommands into multiple
|
||||
* ADD COLUMN. Therefore phase 1 divides the subcommands into multiple
|
||||
* lists, one for each logical "pass" of phase 2.
|
||||
*
|
||||
* ATRewriteTables performs phase 3 for those tables that need it.
|
||||
@ -2782,17 +2782,18 @@ AlterTableGetLockLevel(List *cmds)
|
||||
* to SELECT */
|
||||
case AT_SetTableSpace: /* must rewrite heap */
|
||||
case AT_AlterColumnType: /* must rewrite heap */
|
||||
case AT_AddOids: /* must rewrite heap */
|
||||
case AT_AddOids: /* must rewrite heap */
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
|
||||
/*
|
||||
* These subcommands may require addition of toast tables. If we
|
||||
* add a toast table to a table currently being scanned, we
|
||||
* These subcommands may require addition of toast tables. If
|
||||
* we add a toast table to a table currently being scanned, we
|
||||
* might miss data added to the new toast table by concurrent
|
||||
* insert transactions.
|
||||
*/
|
||||
case AT_SetStorage: /* may add toast tables, see ATRewriteCatalogs() */
|
||||
case AT_SetStorage:/* may add toast tables, see
|
||||
* ATRewriteCatalogs() */
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
|
||||
@ -2808,12 +2809,12 @@ AlterTableGetLockLevel(List *cmds)
|
||||
/*
|
||||
* Subcommands that may be visible to concurrent SELECTs
|
||||
*/
|
||||
case AT_DropColumn: /* change visible to SELECT */
|
||||
case AT_DropColumn: /* change visible to SELECT */
|
||||
case AT_AddColumnToView: /* CREATE VIEW */
|
||||
case AT_DropOids: /* calls AT_DropColumn */
|
||||
case AT_DropOids: /* calls AT_DropColumn */
|
||||
case AT_EnableAlwaysRule: /* may change SELECT rules */
|
||||
case AT_EnableReplicaRule: /* may change SELECT rules */
|
||||
case AT_EnableRule: /* may change SELECT rules */
|
||||
case AT_EnableRule: /* may change SELECT rules */
|
||||
case AT_DisableRule: /* may change SELECT rules */
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
@ -2834,8 +2835,8 @@ AlterTableGetLockLevel(List *cmds)
|
||||
break;
|
||||
|
||||
/*
|
||||
* These subcommands affect write operations only.
|
||||
* XXX Theoretically, these could be ShareRowExclusiveLock.
|
||||
* These subcommands affect write operations only. XXX
|
||||
* Theoretically, these could be ShareRowExclusiveLock.
|
||||
*/
|
||||
case AT_ColumnDefault:
|
||||
case AT_ProcessedConstraint: /* becomes AT_AddConstraint */
|
||||
@ -2872,9 +2873,9 @@ AlterTableGetLockLevel(List *cmds)
|
||||
* Cases essentially the same as CREATE INDEX. We
|
||||
* could reduce the lock strength to ShareLock if
|
||||
* we can work out how to allow concurrent catalog
|
||||
* updates.
|
||||
* XXX Might be set down to ShareRowExclusiveLock
|
||||
* but requires further analysis.
|
||||
* updates. XXX Might be set down to
|
||||
* ShareRowExclusiveLock but requires further
|
||||
* analysis.
|
||||
*/
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
@ -2883,10 +2884,9 @@ AlterTableGetLockLevel(List *cmds)
|
||||
/*
|
||||
* We add triggers to both tables when we add a
|
||||
* Foreign Key, so the lock level must be at least
|
||||
* as strong as CREATE TRIGGER.
|
||||
* XXX Might be set down to ShareRowExclusiveLock
|
||||
* though trigger info is accessed by
|
||||
* pg_get_triggerdef
|
||||
* as strong as CREATE TRIGGER. XXX Might be set
|
||||
* down to ShareRowExclusiveLock though trigger
|
||||
* info is accessed by pg_get_triggerdef
|
||||
*/
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
@ -2902,8 +2902,8 @@ AlterTableGetLockLevel(List *cmds)
|
||||
* started before us will continue to see the old inheritance
|
||||
* behaviour, while queries started after we commit will see
|
||||
* new behaviour. No need to prevent reads or writes to the
|
||||
* subtable while we hook it up though.
|
||||
* Changing the TupDesc may be a problem, so keep highest lock.
|
||||
* subtable while we hook it up though. Changing the TupDesc
|
||||
* may be a problem, so keep highest lock.
|
||||
*/
|
||||
case AT_AddInherit:
|
||||
case AT_DropInherit:
|
||||
@ -2912,9 +2912,9 @@ AlterTableGetLockLevel(List *cmds)
|
||||
|
||||
/*
|
||||
* These subcommands affect implicit row type conversion. They
|
||||
* have affects similar to CREATE/DROP CAST on queries.
|
||||
* don't provide for invalidating parse trees as a result of
|
||||
* such changes, so we keep these at AccessExclusiveLock.
|
||||
* have affects similar to CREATE/DROP CAST on queries. don't
|
||||
* provide for invalidating parse trees as a result of such
|
||||
* changes, so we keep these at AccessExclusiveLock.
|
||||
*/
|
||||
case AT_AddOf:
|
||||
case AT_DropOf:
|
||||
@ -2940,29 +2940,32 @@ AlterTableGetLockLevel(List *cmds)
|
||||
* updates.
|
||||
*/
|
||||
case AT_SetStatistics: /* Uses MVCC in getTableAttrs() */
|
||||
case AT_ClusterOn: /* Uses MVCC in getIndexes() */
|
||||
case AT_ClusterOn: /* Uses MVCC in getIndexes() */
|
||||
case AT_DropCluster: /* Uses MVCC in getIndexes() */
|
||||
case AT_SetOptions: /* Uses MVCC in getTableAttrs() */
|
||||
case AT_SetOptions: /* Uses MVCC in getTableAttrs() */
|
||||
case AT_ResetOptions: /* Uses MVCC in getTableAttrs() */
|
||||
cmd_lockmode = ShareUpdateExclusiveLock;
|
||||
break;
|
||||
|
||||
case AT_ValidateConstraint: /* Uses MVCC in getConstraints() */
|
||||
case AT_ValidateConstraint: /* Uses MVCC in
|
||||
* getConstraints() */
|
||||
cmd_lockmode = ShareUpdateExclusiveLock;
|
||||
break;
|
||||
|
||||
/*
|
||||
* Rel options are more complex than first appears. Options
|
||||
* are set here for tables, views and indexes; for historical
|
||||
* reasons these can all be used with ALTER TABLE, so we
|
||||
* can't decide between them using the basic grammar.
|
||||
* reasons these can all be used with ALTER TABLE, so we can't
|
||||
* decide between them using the basic grammar.
|
||||
*
|
||||
* XXX Look in detail at each option to determine lock level,
|
||||
* e.g.
|
||||
* cmd_lockmode = GetRelOptionsLockLevel((List *) cmd->def);
|
||||
* e.g. cmd_lockmode = GetRelOptionsLockLevel((List *)
|
||||
* cmd->def);
|
||||
*/
|
||||
case AT_SetRelOptions: /* Uses MVCC in getIndexes() and getTables() */
|
||||
case AT_ResetRelOptions: /* Uses MVCC in getIndexes() and getTables() */
|
||||
case AT_SetRelOptions: /* Uses MVCC in getIndexes() and
|
||||
* getTables() */
|
||||
case AT_ResetRelOptions: /* Uses MVCC in getIndexes() and
|
||||
* getTables() */
|
||||
cmd_lockmode = AccessExclusiveLock;
|
||||
break;
|
||||
|
||||
@ -3209,7 +3212,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd,
|
||||
cmd->subtype = AT_ValidateConstraintRecurse;
|
||||
pass = AT_PASS_MISC;
|
||||
break;
|
||||
case AT_ReplicaIdentity: /* REPLICA IDENTITY ... */
|
||||
case AT_ReplicaIdentity: /* REPLICA IDENTITY ... */
|
||||
ATSimplePermissions(rel, ATT_TABLE | ATT_MATVIEW);
|
||||
pass = AT_PASS_MISC;
|
||||
/* This command never recurses */
|
||||
@ -3258,7 +3261,7 @@ ATPrepCmd(List **wqueue, Relation rel, AlterTableCmd *cmd,
|
||||
/*
|
||||
* ATRewriteCatalogs
|
||||
*
|
||||
* Traffic cop for ALTER TABLE Phase 2 operations. Subcommands are
|
||||
* Traffic cop for ALTER TABLE Phase 2 operations. Subcommands are
|
||||
* dispatched in a "safe" execution order (designed to avoid unnecessary
|
||||
* conflicts).
|
||||
*/
|
||||
@ -3604,8 +3607,8 @@ ATRewriteTables(List **wqueue, LOCKMODE lockmode)
|
||||
if (RelationIsUsedAsCatalogTable(OldHeap))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot rewrite table \"%s\" used as a catalog table",
|
||||
RelationGetRelationName(OldHeap))));
|
||||
errmsg("cannot rewrite table \"%s\" used as a catalog table",
|
||||
RelationGetRelationName(OldHeap))));
|
||||
|
||||
/*
|
||||
* Don't allow rewrite on temp tables of other backends ... their
|
||||
@ -3856,7 +3859,7 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
||||
{
|
||||
/*
|
||||
* All predicate locks on the tuples or pages are about to be made
|
||||
* invalid, because we move tuples around. Promote them to
|
||||
* invalid, because we move tuples around. Promote them to
|
||||
* relation locks.
|
||||
*/
|
||||
TransferPredicateLocksToHeapRelation(oldrel);
|
||||
@ -3946,8 +3949,8 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
|
||||
HeapTupleSetOid(tuple, tupOid);
|
||||
|
||||
/*
|
||||
* Constraints might reference the tableoid column, so initialize
|
||||
* t_tableOid before evaluating them.
|
||||
* Constraints might reference the tableoid column, so
|
||||
* initialize t_tableOid before evaluating them.
|
||||
*/
|
||||
tuple->t_tableOid = RelationGetRelid(oldrel);
|
||||
}
|
||||
@ -4404,7 +4407,7 @@ find_typed_table_dependencies(Oid typeOid, const char *typeName, DropBehavior be
|
||||
*
|
||||
* Check whether a type is suitable for CREATE TABLE OF/ALTER TABLE OF. If it
|
||||
* isn't suitable, throw an error. Currently, we require that the type
|
||||
* originated with CREATE TYPE AS. We could support any row type, but doing so
|
||||
* originated with CREATE TYPE AS. We could support any row type, but doing so
|
||||
* would require handling a number of extra corner cases in the DDL commands.
|
||||
*/
|
||||
void
|
||||
@ -4423,7 +4426,7 @@ check_of_type(HeapTuple typetuple)
|
||||
|
||||
/*
|
||||
* Close the parent rel, but keep our AccessShareLock on it until xact
|
||||
* commit. That will prevent someone else from deleting or ALTERing
|
||||
* commit. That will prevent someone else from deleting or ALTERing
|
||||
* the type before the typed table creation/conversion commits.
|
||||
*/
|
||||
relation_close(typeRelation, NoLock);
|
||||
@ -4882,7 +4885,7 @@ add_column_collation_dependency(Oid relid, int32 attnum, Oid collid)
|
||||
/*
|
||||
* ALTER TABLE SET WITH OIDS
|
||||
*
|
||||
* Basically this is an ADD COLUMN for the special OID column. We have
|
||||
* Basically this is an ADD COLUMN for the special OID column. We have
|
||||
* to cons up a ColumnDef node because the ADD COLUMN code needs one.
|
||||
*/
|
||||
static void
|
||||
@ -5352,7 +5355,7 @@ ATExecSetStorage(Relation rel, const char *colName, Node *newValue, LOCKMODE loc
|
||||
*
|
||||
* DROP COLUMN cannot use the normal ALTER TABLE recursion mechanism,
|
||||
* because we have to decide at runtime whether to recurse or not depending
|
||||
* on whether attinhcount goes to zero or not. (We can't check this in a
|
||||
* on whether attinhcount goes to zero or not. (We can't check this in a
|
||||
* static pre-pass because it won't handle multiple inheritance situations
|
||||
* correctly.)
|
||||
*/
|
||||
@ -5600,7 +5603,7 @@ ATExecAddIndex(AlteredTableInfo *tab, Relation rel,
|
||||
|
||||
/*
|
||||
* If TryReuseIndex() stashed a relfilenode for us, we used it for the new
|
||||
* index instead of building from scratch. The DROP of the old edition of
|
||||
* index instead of building from scratch. The DROP of the old edition of
|
||||
* this index will have scheduled the storage for deletion at commit, so
|
||||
* cancel that pending deletion.
|
||||
*/
|
||||
@ -5642,7 +5645,7 @@ ATExecAddIndexConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
elog(ERROR, "index \"%s\" is not unique", indexName);
|
||||
|
||||
/*
|
||||
* Determine name to assign to constraint. We require a constraint to
|
||||
* Determine name to assign to constraint. We require a constraint to
|
||||
* have the same name as the underlying index; therefore, use the index's
|
||||
* existing name as the default constraint name, and if the user
|
||||
* explicitly gives some other name for the constraint, rename the index
|
||||
@ -5851,7 +5854,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel,
|
||||
|
||||
/*
|
||||
* Check if ONLY was specified with ALTER TABLE. If so, allow the
|
||||
* contraint creation only if there are no children currently. Error out
|
||||
* contraint creation only if there are no children currently. Error out
|
||||
* otherwise.
|
||||
*/
|
||||
if (!recurse && children != NIL)
|
||||
@ -5883,7 +5886,7 @@ ATAddCheckConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel,
|
||||
/*
|
||||
* Add a foreign-key constraint to a single table
|
||||
*
|
||||
* Subroutine for ATExecAddConstraint. Must already hold exclusive
|
||||
* Subroutine for ATExecAddConstraint. Must already hold exclusive
|
||||
* lock on the rel, and have done appropriate validity checks for it.
|
||||
* We do permissions checks here, however.
|
||||
*/
|
||||
@ -6022,7 +6025,7 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
*
|
||||
* Note that we have to be careful about the difference between the actual
|
||||
* PK column type and the opclass' declared input type, which might be
|
||||
* only binary-compatible with it. The declared opcintype is the right
|
||||
* only binary-compatible with it. The declared opcintype is the right
|
||||
* thing to probe pg_amop with.
|
||||
*/
|
||||
if (numfks != numpks)
|
||||
@ -6179,7 +6182,7 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
|
||||
/*
|
||||
* Upon a change to the cast from the FK column to its pfeqop
|
||||
* operand, revalidate the constraint. For this evaluation, a
|
||||
* operand, revalidate the constraint. For this evaluation, a
|
||||
* binary coercion cast is equivalent to no cast at all. While
|
||||
* type implementors should design implicit casts with an eye
|
||||
* toward consistency of operations like equality, we cannot
|
||||
@ -6197,7 +6200,7 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
* Necessarily, the primary key column must then be of the domain
|
||||
* type. Since the constraint was previously valid, all values on
|
||||
* the foreign side necessarily exist on the primary side and in
|
||||
* turn conform to the domain. Consequently, we need not treat
|
||||
* turn conform to the domain. Consequently, we need not treat
|
||||
* domains specially here.
|
||||
*
|
||||
* Since we require that all collations share the same notion of
|
||||
@ -6207,7 +6210,7 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
* We need not directly consider the PK type. It's necessarily
|
||||
* binary coercible to the opcintype of the unique index column,
|
||||
* and ri_triggers.c will only deal with PK datums in terms of
|
||||
* that opcintype. Changing the opcintype also changes pfeqop.
|
||||
* that opcintype. Changing the opcintype also changes pfeqop.
|
||||
*/
|
||||
old_check_ok = (new_pathtype == old_pathtype &&
|
||||
new_castfunc == old_castfunc &&
|
||||
@ -6300,14 +6303,14 @@ ATAddForeignKeyConstraint(AlteredTableInfo *tab, Relation rel,
|
||||
*/
|
||||
static void
|
||||
ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd,
|
||||
bool recurse, bool recursing, LOCKMODE lockmode)
|
||||
bool recurse, bool recursing, LOCKMODE lockmode)
|
||||
{
|
||||
Relation conrel;
|
||||
SysScanDesc scan;
|
||||
ScanKeyData key;
|
||||
HeapTuple contuple;
|
||||
Form_pg_constraint currcon = NULL;
|
||||
Constraint *cmdcon = NULL;
|
||||
Constraint *cmdcon = NULL;
|
||||
bool found = false;
|
||||
|
||||
Assert(IsA(cmd->def, Constraint));
|
||||
@ -6374,8 +6377,8 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd,
|
||||
heap_freetuple(copyTuple);
|
||||
|
||||
/*
|
||||
* Now we need to update the multiple entries in pg_trigger
|
||||
* that implement the constraint.
|
||||
* Now we need to update the multiple entries in pg_trigger that
|
||||
* implement the constraint.
|
||||
*/
|
||||
tgrel = heap_open(TriggerRelationId, RowExclusiveLock);
|
||||
|
||||
@ -6397,7 +6400,7 @@ ATExecAlterConstraint(Relation rel, AlterTableCmd *cmd,
|
||||
CatalogUpdateIndexes(tgrel, copyTuple);
|
||||
|
||||
InvokeObjectPostAlterHook(TriggerRelationId,
|
||||
HeapTupleGetOid(tgtuple), 0);
|
||||
HeapTupleGetOid(tgtuple), 0);
|
||||
|
||||
heap_freetuple(copyTuple);
|
||||
}
|
||||
@ -6619,10 +6622,10 @@ transformColumnNameList(Oid relId, List *colList,
|
||||
* transformFkeyGetPrimaryKey -
|
||||
*
|
||||
* Look up the names, attnums, and types of the primary key attributes
|
||||
* for the pkrel. Also return the index OID and index opclasses of the
|
||||
* for the pkrel. Also return the index OID and index opclasses of the
|
||||
* index supporting the primary key.
|
||||
*
|
||||
* All parameters except pkrel are output parameters. Also, the function
|
||||
* All parameters except pkrel are output parameters. Also, the function
|
||||
* return value is the number of attributes in the primary key.
|
||||
*
|
||||
* Used when the column list in the REFERENCES specification is omitted.
|
||||
@ -6662,7 +6665,7 @@ transformFkeyGetPrimaryKey(Relation pkrel, Oid *indexOid,
|
||||
if (indexStruct->indisprimary && IndexIsValid(indexStruct))
|
||||
{
|
||||
/*
|
||||
* Refuse to use a deferrable primary key. This is per SQL spec,
|
||||
* Refuse to use a deferrable primary key. This is per SQL spec,
|
||||
* and there would be a lot of interesting semantic problems if we
|
||||
* tried to allow it.
|
||||
*/
|
||||
@ -7592,7 +7595,7 @@ ATPrepAlterColumnType(List **wqueue,
|
||||
tab->relkind == RELKIND_FOREIGN_TABLE)
|
||||
{
|
||||
/*
|
||||
* For composite types, do this check now. Tables will check it later
|
||||
* For composite types, do this check now. Tables will check it later
|
||||
* when the table is being rewritten.
|
||||
*/
|
||||
find_composite_type_dependencies(rel->rd_rel->reltype, rel, NULL);
|
||||
@ -7601,7 +7604,7 @@ ATPrepAlterColumnType(List **wqueue,
|
||||
ReleaseSysCache(tuple);
|
||||
|
||||
/*
|
||||
* The recursion case is handled by ATSimpleRecursion. However, if we are
|
||||
* The recursion case is handled by ATSimpleRecursion. However, if we are
|
||||
* told not to recurse, there had better not be any child tables; else the
|
||||
* alter would put them out of step.
|
||||
*/
|
||||
@ -7710,7 +7713,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
*
|
||||
* We remove any implicit coercion steps at the top level of the old
|
||||
* default expression; this has been agreed to satisfy the principle of
|
||||
* least surprise. (The conversion to the new column type should act like
|
||||
* least surprise. (The conversion to the new column type should act like
|
||||
* it started from what the user sees as the stored expression, and the
|
||||
* implicit coercions aren't going to be shown.)
|
||||
*/
|
||||
@ -7739,7 +7742,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
* and record enough information to let us recreate the objects.
|
||||
*
|
||||
* The actual recreation does not happen here, but only after we have
|
||||
* performed all the individual ALTER TYPE operations. We have to save
|
||||
* performed all the individual ALTER TYPE operations. We have to save
|
||||
* the info before executing ALTER TYPE, though, else the deparser will
|
||||
* get confused.
|
||||
*
|
||||
@ -7868,7 +7871,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
* used in the trigger's WHEN condition. The first case would
|
||||
* not require any extra work, but the second case would
|
||||
* require updating the WHEN expression, which will take a
|
||||
* significant amount of new code. Since we can't easily tell
|
||||
* significant amount of new code. Since we can't easily tell
|
||||
* which case applies, we punt for both. FIXME someday.
|
||||
*/
|
||||
ereport(ERROR,
|
||||
@ -8144,24 +8147,24 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode)
|
||||
|
||||
/*
|
||||
* Re-parse the index and constraint definitions, and attach them to the
|
||||
* appropriate work queue entries. We do this before dropping because in
|
||||
* appropriate work queue entries. We do this before dropping because in
|
||||
* the case of a FOREIGN KEY constraint, we might not yet have exclusive
|
||||
* lock on the table the constraint is attached to, and we need to get
|
||||
* that before dropping. It's safe because the parser won't actually look
|
||||
* at the catalogs to detect the existing entry.
|
||||
*
|
||||
* We can't rely on the output of deparsing to tell us which relation
|
||||
* to operate on, because concurrent activity might have made the name
|
||||
* We can't rely on the output of deparsing to tell us which relation to
|
||||
* operate on, because concurrent activity might have made the name
|
||||
* resolve differently. Instead, we've got to use the OID of the
|
||||
* constraint or index we're processing to figure out which relation
|
||||
* to operate on.
|
||||
* constraint or index we're processing to figure out which relation to
|
||||
* operate on.
|
||||
*/
|
||||
forboth(oid_item, tab->changedConstraintOids,
|
||||
def_item, tab->changedConstraintDefs)
|
||||
{
|
||||
Oid oldId = lfirst_oid(oid_item);
|
||||
Oid relid;
|
||||
Oid confrelid;
|
||||
Oid oldId = lfirst_oid(oid_item);
|
||||
Oid relid;
|
||||
Oid confrelid;
|
||||
|
||||
get_constraint_relation_oids(oldId, &relid, &confrelid);
|
||||
ATPostAlterTypeParse(oldId, relid, confrelid,
|
||||
@ -8171,8 +8174,8 @@ ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode)
|
||||
forboth(oid_item, tab->changedIndexOids,
|
||||
def_item, tab->changedIndexDefs)
|
||||
{
|
||||
Oid oldId = lfirst_oid(oid_item);
|
||||
Oid relid;
|
||||
Oid oldId = lfirst_oid(oid_item);
|
||||
Oid relid;
|
||||
|
||||
relid = IndexGetRelation(oldId, false);
|
||||
ATPostAlterTypeParse(oldId, relid, InvalidOid,
|
||||
@ -8238,9 +8241,9 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd,
|
||||
cmd));
|
||||
else if (IsA(stmt, AlterTableStmt))
|
||||
querytree_list = list_concat(querytree_list,
|
||||
transformAlterTableStmt(oldRelId,
|
||||
transformAlterTableStmt(oldRelId,
|
||||
(AlterTableStmt *) stmt,
|
||||
cmd));
|
||||
cmd));
|
||||
else
|
||||
querytree_list = lappend(querytree_list, stmt);
|
||||
}
|
||||
@ -8925,13 +8928,13 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation,
|
||||
if (check_option)
|
||||
{
|
||||
const char *view_updatable_error =
|
||||
view_query_is_auto_updatable(view_query, true);
|
||||
view_query_is_auto_updatable(view_query, true);
|
||||
|
||||
if (view_updatable_error)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("WITH CHECK OPTION is supported only on auto-updatable views"),
|
||||
errhint("%s", view_updatable_error)));
|
||||
errmsg("WITH CHECK OPTION is supported only on auto-updatable views"),
|
||||
errhint("%s", view_updatable_error)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -9098,7 +9101,8 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace, LOCKMODE lockmode)
|
||||
/* Fetch the list of indexes on toast relation if necessary */
|
||||
if (OidIsValid(reltoastrelid))
|
||||
{
|
||||
Relation toastRel = relation_open(reltoastrelid, lockmode);
|
||||
Relation toastRel = relation_open(reltoastrelid, lockmode);
|
||||
|
||||
reltoastidxids = RelationGetIndexList(toastRel);
|
||||
relation_close(toastRel, lockmode);
|
||||
}
|
||||
@ -9120,8 +9124,8 @@ ATExecSetTableSpace(Oid tableOid, Oid newTableSpace, LOCKMODE lockmode)
|
||||
FlushRelationBuffers(rel);
|
||||
|
||||
/*
|
||||
* Relfilenodes are not unique in databases across tablespaces, so we
|
||||
* need to allocate a new one in the new tablespace.
|
||||
* Relfilenodes are not unique in databases across tablespaces, so we need
|
||||
* to allocate a new one in the new tablespace.
|
||||
*/
|
||||
newrelfilenode = GetNewRelFileNode(newTableSpace, NULL,
|
||||
rel->rd_rel->relpersistence);
|
||||
@ -9236,9 +9240,9 @@ copy_relation_data(SMgrRelation src, SMgrRelation dst,
|
||||
forkNum))));
|
||||
|
||||
/*
|
||||
* WAL-log the copied page. Unfortunately we don't know what kind of
|
||||
* a page this is, so we have to log the full page including any
|
||||
* unused space.
|
||||
* WAL-log the copied page. Unfortunately we don't know what kind of a
|
||||
* page this is, so we have to log the full page including any unused
|
||||
* space.
|
||||
*/
|
||||
if (use_wal)
|
||||
log_newpage(&dst->smgr_rnode.node, forkNum, blkno, page, false);
|
||||
@ -9246,7 +9250,7 @@ copy_relation_data(SMgrRelation src, SMgrRelation dst,
|
||||
PageSetChecksumInplace(page, blkno);
|
||||
|
||||
/*
|
||||
* Now write the page. We say isTemp = true even if it's not a temp
|
||||
* Now write the page. We say isTemp = true even if it's not a temp
|
||||
* rel, because there's no need for smgr to schedule an fsync for this
|
||||
* write; we'll do it ourselves below.
|
||||
*/
|
||||
@ -9256,7 +9260,7 @@ copy_relation_data(SMgrRelation src, SMgrRelation dst,
|
||||
pfree(buf);
|
||||
|
||||
/*
|
||||
* If the rel is WAL-logged, must fsync before commit. We use heap_sync
|
||||
* If the rel is WAL-logged, must fsync before commit. We use heap_sync
|
||||
* to ensure that the toast table gets fsync'd too. (For a temp or
|
||||
* unlogged rel we don't care since the data will be gone after a crash
|
||||
* anyway.)
|
||||
@ -9431,7 +9435,7 @@ ATExecAddInherit(Relation child_rel, RangeVar *parent, LOCKMODE lockmode)
|
||||
MergeConstraintsIntoExisting(child_rel, parent_rel);
|
||||
|
||||
/*
|
||||
* OK, it looks valid. Make the catalog entries that show inheritance.
|
||||
* OK, it looks valid. Make the catalog entries that show inheritance.
|
||||
*/
|
||||
StoreCatalogInheritance1(RelationGetRelid(child_rel),
|
||||
RelationGetRelid(parent_rel),
|
||||
@ -9907,7 +9911,7 @@ ATExecDropInherit(Relation rel, RangeVar *parent, LOCKMODE lockmode)
|
||||
* Drop the dependency created by StoreCatalogInheritance1 (CREATE TABLE
|
||||
* INHERITS/ALTER TABLE INHERIT -- refclassid will be RelationRelationId) or
|
||||
* heap_create_with_catalog (CREATE TABLE OF/ALTER TABLE OF -- refclassid will
|
||||
* be TypeRelationId). There's no convenient way to do this, so go trawling
|
||||
* be TypeRelationId). There's no convenient way to do this, so go trawling
|
||||
* through pg_depend.
|
||||
*/
|
||||
static void
|
||||
@ -10093,7 +10097,7 @@ ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKMODE lockmode)
|
||||
/*
|
||||
* ALTER TABLE NOT OF
|
||||
*
|
||||
* Detach a typed table from its originating type. Just clear reloftype and
|
||||
* Detach a typed table from its originating type. Just clear reloftype and
|
||||
* remove the dependency.
|
||||
*/
|
||||
static void
|
||||
@ -10155,7 +10159,7 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid,
|
||||
*/
|
||||
pg_class = heap_open(RelationRelationId, RowExclusiveLock);
|
||||
pg_class_tuple = SearchSysCacheCopy1(RELOID,
|
||||
ObjectIdGetDatum(RelationGetRelid(rel)));
|
||||
ObjectIdGetDatum(RelationGetRelid(rel)));
|
||||
if (!HeapTupleIsValid(pg_class_tuple))
|
||||
elog(ERROR, "cache lookup failed for relation \"%s\"",
|
||||
RelationGetRelationName(rel));
|
||||
@ -10191,8 +10195,8 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid,
|
||||
}
|
||||
|
||||
/*
|
||||
* Clear the indisreplident flag from any index that had it previously, and
|
||||
* set it for any index that should have it now.
|
||||
* Clear the indisreplident flag from any index that had it previously,
|
||||
* and set it for any index that should have it now.
|
||||
*/
|
||||
pg_index = heap_open(IndexRelationId, RowExclusiveLock);
|
||||
foreach(index, RelationGetIndexList(rel))
|
||||
@ -10201,7 +10205,7 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid,
|
||||
bool dirty = false;
|
||||
|
||||
pg_index_tuple = SearchSysCacheCopy1(INDEXRELID,
|
||||
ObjectIdGetDatum(thisIndexOid));
|
||||
ObjectIdGetDatum(thisIndexOid));
|
||||
if (!HeapTupleIsValid(pg_index_tuple))
|
||||
elog(ERROR, "cache lookup failed for index %u", thisIndexOid);
|
||||
pg_index_form = (Form_pg_index) GETSTRUCT(pg_index_tuple);
|
||||
@ -10261,7 +10265,7 @@ ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode
|
||||
}
|
||||
else if (stmt->identity_type == REPLICA_IDENTITY_INDEX)
|
||||
{
|
||||
/* fallthrough */;
|
||||
/* fallthrough */ ;
|
||||
}
|
||||
else
|
||||
elog(ERROR, "unexpected identity type %u", stmt->identity_type);
|
||||
@ -10289,20 +10293,20 @@ ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode
|
||||
if (!indexRel->rd_am->amcanunique || !indexRel->rd_index->indisunique)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("cannot use non-unique index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
errmsg("cannot use non-unique index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
/* Deferred indexes are not guaranteed to be always unique. */
|
||||
if (!indexRel->rd_index->indimmediate)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot use non-immediate index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
errmsg("cannot use non-immediate index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
/* Expression indexes aren't supported. */
|
||||
if (RelationGetIndexExpressions(indexRel) != NIL)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot use expression index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
errmsg("cannot use expression index \"%s\" as replica identity",
|
||||
RelationGetRelationName(indexRel))));
|
||||
/* Predicate indexes aren't supported. */
|
||||
if (RelationGetIndexPredicate(indexRel) != NIL)
|
||||
ereport(ERROR,
|
||||
@ -10319,7 +10323,7 @@ ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode
|
||||
/* Check index for nullable columns. */
|
||||
for (key = 0; key < indexRel->rd_index->indnatts; key++)
|
||||
{
|
||||
int16 attno = indexRel->rd_index->indkey.values[key];
|
||||
int16 attno = indexRel->rd_index->indkey.values[key];
|
||||
Form_pg_attribute attr;
|
||||
|
||||
/* Of the system columns, only oid is indexable. */
|
||||
@ -10878,7 +10882,7 @@ AtEOXact_on_commit_actions(bool isCommit)
|
||||
* Post-subcommit or post-subabort cleanup for ON COMMIT management.
|
||||
*
|
||||
* During subabort, we can immediately remove entries created during this
|
||||
* subtransaction. During subcommit, just relabel entries marked during
|
||||
* subtransaction. During subcommit, just relabel entries marked during
|
||||
* this subtransaction as being the parent's responsibility.
|
||||
*/
|
||||
void
|
||||
@ -10922,7 +10926,7 @@ AtEOSubXact_on_commit_actions(bool isCommit, SubTransactionId mySubid,
|
||||
* This is intended as a callback for RangeVarGetRelidExtended(). It allows
|
||||
* the relation to be locked only if (1) it's a plain table, materialized
|
||||
* view, or TOAST table and (2) the current user is the owner (or the
|
||||
* superuser). This meets the permission-checking needs of CLUSTER, REINDEX
|
||||
* superuser). This meets the permission-checking needs of CLUSTER, REINDEX
|
||||
* TABLE, and REFRESH MATERIALIZED VIEW; we expose it here so that it can be
|
||||
* used by all.
|
||||
*/
|
||||
@ -10939,7 +10943,7 @@ RangeVarCallbackOwnsTable(const RangeVar *relation,
|
||||
/*
|
||||
* If the relation does exist, check whether it's an index. But note that
|
||||
* the relation might have been dropped between the time we did the name
|
||||
* lookup and now. In that case, there's nothing to do.
|
||||
* lookup and now. In that case, there's nothing to do.
|
||||
*/
|
||||
relkind = get_rel_relkind(relId);
|
||||
if (!relkind)
|
||||
@ -11105,8 +11109,8 @@ RangeVarCallbackForAlterRelation(const RangeVar *rv, Oid relid, Oid oldrelid,
|
||||
relkind != RELKIND_FOREIGN_TABLE)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("\"%s\" is not a table, view, materialized view, sequence, or foreign table",
|
||||
rv->relname)));
|
||||
errmsg("\"%s\" is not a table, view, materialized view, sequence, or foreign table",
|
||||
rv->relname)));
|
||||
|
||||
ReleaseSysCache(tuple);
|
||||
}
|
||||
|
Reference in New Issue
Block a user