summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
authorSimon Riggs2011-02-08 12:23:20 +0000
committerSimon Riggs2011-02-08 12:23:20 +0000
commit722bf7017bbe796decc79c1fde03e7a83dae9ada (patch)
tree94145fc7a78c140f753d856bae8edf54bcce93b3 /src/bin
parent7202ad7b8dd07864092be70287fe971ec72a3fbc (diff)
Extend ALTER TABLE to allow Foreign Keys to be added without initial validation.
FK constraints that are marked NOT VALID may later be VALIDATED, which uses an ShareUpdateExclusiveLock on constraint table and RowShareLock on referenced table. Significantly reduces lock strength and duration when adding FKs. New state visible from psql. Simon Riggs, with reviews from Marko Tiikkaja and Robert Haas
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/psql/describe.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index ada04de451f..8d4c390933f 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -1714,8 +1714,10 @@ describeOneTableDetails(const char *schemaname,
{
printfPQExpBuffer(&buf,
"SELECT conname,\n"
- " pg_catalog.pg_get_constraintdef(r.oid, true) as condef\n"
- "FROM pg_catalog.pg_constraint r\n"
+ " pg_catalog.pg_get_constraintdef(r.oid, true) as condef\n");
+ if (pset.sversion >= 90100)
+ appendPQExpBuffer(&buf, " ,convalidated\n");
+ appendPQExpBuffer(&buf, "FROM pg_catalog.pg_constraint r\n"
"WHERE r.conrelid = '%s' AND r.contype = 'f' ORDER BY 1",
oid);
result = PSQLexec(buf.data, false);
@@ -1734,6 +1736,9 @@ describeOneTableDetails(const char *schemaname,
PQgetvalue(result, i, 0),
PQgetvalue(result, i, 1));
+ if (strcmp(PQgetvalue(result, i, 2), "f") == 0)
+ appendPQExpBuffer(&buf, " NOT VALID");
+
printTableAddFooter(&cont, buf.data);
}
}