alter_adddrop.v1.patch
text/x-patch
Filename: alter_adddrop.v1.patch
Type: text/x-patch
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/commands/tablecmds.c | 11 | 1 |
| src/backend/parser/gram.y | 18 | 0 |
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 6729d83..96bd135 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2512,7 +2512,6 @@ AlterTableGetLockLevel(List *cmds)
* New subcommand types should be added here by default.
*/
case AT_AddColumn: /* may rewrite heap, in some cases and visible to SELECT */
- case AT_DropColumn: /* change visible to SELECT */
case AT_AddColumnToView: /* CREATE VIEW */
case AT_AlterColumnType: /* must rewrite heap */
case AT_DropConstraint: /* as DROP INDEX */
@@ -2530,8 +2529,19 @@ AlterTableGetLockLevel(List *cmds)
break;
/*
+ * DROP can use a lower level of locking, if aren't using CASCADE
+ */
+ case AT_DropColumn: /* change visible to SELECT */
+ if (stmt->behavior == DROP_CASCADE)
+ cmd_lockmode = AccessExclusiveLock;
+ else
+ cmd_lockmode = ShareRowExclusiveLock;
+ break;
+
+ /*
* These subcommands affect write operations only.
*/
+ case AT_AddColumnNoQuals: /* must never rewrite heap */
case AT_ColumnDefault:
case AT_ProcessedConstraint: /* becomes AT_AddConstraint */
case AT_AddConstraintRecurse: /* becomes AT_AddConstraint */
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 8fc79b6..48a7b8c 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -1633,6 +1633,14 @@ alter_table_cmd:
n->def = $3;
$$ = (Node *)n;
}
+ /* ALTER TABLE <name> ADD COLUMN <coldef> */
+ | ADD_P COLUMN columnDefNoQuals CONCURRENTLY
+ {
+ AlterTableCmd *n = makeNode(AlterTableCmd);
+ n->subtype = AT_AddColumnNoQuals;
+ n->def = $3;
+ $$ = (Node *)n;
+ }
/* ALTER TABLE <name> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
| ALTER opt_column ColId alter_column_default
{
@@ -2412,6 +2420,16 @@ columnDef: ColId Typename ColQualList
}
;
+columnDefNoQuals: ColId Typename
+ {
+ ColumnDef *n = makeNode(ColumnDef);
+ n->colname = $1;
+ n->typeName = $2;
+ n->is_local = true;
+ $$ = (Node *)n;
+ }
+ ;
+
columnOptions: ColId WITH OPTIONS ColQualList
{
ColumnDef *n = makeNode(ColumnDef);