const char *schemaName, Oid schemaOid)
{
char *filename = get_extension_absolute_path(control->script);
- char *save_client_min_messages = NULL,
- *save_log_min_messages = NULL,
+ char *save_client_min_messages,
+ *save_log_min_messages,
*save_search_path;
StringInfoData pathbuf;
ListCell *lc;
* We use the equivalent of SET LOCAL to ensure the setting is undone
* upon error.
*/
+ save_client_min_messages =
+ pstrdup(GetConfigOption("client_min_messages", false));
if (client_min_messages < WARNING)
- {
- save_client_min_messages =
- pstrdup(GetConfigOption("client_min_messages", false));
(void) set_config_option("client_min_messages", "warning",
PGC_USERSET, PGC_S_SESSION,
GUC_ACTION_LOCAL, true);
- }
+ save_log_min_messages =
+ pstrdup(GetConfigOption("log_min_messages", false));
if (log_min_messages < WARNING)
- {
- save_log_min_messages =
- pstrdup(GetConfigOption("log_min_messages", false));
(void) set_config_option("log_min_messages", "warning",
PGC_SUSET, PGC_S_SESSION,
GUC_ACTION_LOCAL, true);
- }
/*
* Set up the search path to contain the target schema, then the schemas
(void) set_config_option("search_path", save_search_path,
PGC_USERSET, PGC_S_SESSION,
GUC_ACTION_LOCAL, true);
-
- if (save_client_min_messages != NULL)
- (void) set_config_option("client_min_messages", save_client_min_messages,
- PGC_USERSET, PGC_S_SESSION,
- GUC_ACTION_LOCAL, true);
- if (save_log_min_messages != NULL)
- (void) set_config_option("log_min_messages", save_log_min_messages,
- PGC_SUSET, PGC_S_SESSION,
- GUC_ACTION_LOCAL, true);
+ (void) set_config_option("client_min_messages", save_client_min_messages,
+ PGC_USERSET, PGC_S_SESSION,
+ GUC_ACTION_LOCAL, true);
+ (void) set_config_option("log_min_messages", save_log_min_messages,
+ PGC_SUSET, PGC_S_SESSION,
+ GUC_ACTION_LOCAL, true);
}
/*
ATExecValidateConstraint(Relation rel, const char *constrName)
{
Relation conrel;
- Form_pg_constraint con;
SysScanDesc scan;
ScanKeyData key;
HeapTuple tuple;
+ Form_pg_constraint con = NULL;
bool found = false;
- Oid conid;
conrel = heap_open(ConstraintRelationId, RowExclusiveLock);
/*
- * Find and the target constraint
+ * Find and check the target constraint
*/
ScanKeyInit(&key,
Anum_pg_constraint_conrelid,
while (HeapTupleIsValid(tuple = systable_getnext(scan)))
{
con = (Form_pg_constraint) GETSTRUCT(tuple);
-
- if (strcmp(NameStr(con->conname), constrName) != 0)
- continue;
-
- conid = HeapTupleGetOid(tuple);
- found = true;
- break;
+ if (con->contype == CONSTRAINT_FOREIGN &&
+ strcmp(NameStr(con->conname), constrName) == 0)
+ {
+ found = true;
+ break;
+ }
}
- if (found && con->contype == CONSTRAINT_FOREIGN && !con->convalidated)
+ if (!found)
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("foreign key constraint \"%s\" of relation \"%s\" does not exist",
+ constrName, RelationGetRelationName(rel))));
+
+ if (!con->convalidated)
{
+ Oid conid = HeapTupleGetOid(tuple);
HeapTuple copyTuple = heap_copytuple(tuple);
Form_pg_constraint copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple);
Relation refrel;
simple_heap_update(conrel, ©Tuple->t_self, copyTuple);
CatalogUpdateIndexes(conrel, copyTuple);
heap_freetuple(copyTuple);
+
heap_close(refrel, NoLock);
}
systable_endscan(scan);
- heap_close(conrel, RowExclusiveLock);
- if (!found)
- {
- ereport(ERROR,
- (errcode(ERRCODE_UNDEFINED_OBJECT),
- errmsg("foreign key constraint \"%s\" of relation \"%s\" does not exist",
- constrName, RelationGetRelationName(rel))));
- }
+ heap_close(conrel, RowExclusiveLock);
}
/*