diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2012-04-20 23:46:20 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2012-04-20 23:56:57 -0300 |
commit | 09ff76fcdb275769ac4d1a45a67416735613d04b (patch) | |
tree | 15d86c29de778477258b9d43128d8ed23ced6479 /src/backend/utils/adt/ruleutils.c | |
parent | 1f0363001166ef6a43619846e44cfb9dbe7335ed (diff) | |
download | postgresql-09ff76fcdb275769ac4d1a45a67416735613d04b.tar.gz postgresql-09ff76fcdb275769ac4d1a45a67416735613d04b.zip |
Recast "ONLY" column CHECK constraints as NO INHERIT
The original syntax wasn't universally loved, and it didn't allow its
usage in CREATE TABLE, only ALTER TABLE. It now works everywhere, and
it also allows using ALTER TABLE ONLY to add an uninherited CHECK
constraint, per discussion.
The pg_constraint column has accordingly been renamed connoinherit.
This commit partly reverts some of the changes in
61d81bd28dbec65a6b144e0cd3d0bfe25913c3ac, particularly some pg_dump and
psql bits, because now pg_get_constraintdef includes the necessary NO
INHERIT within the constraint definition.
Author: Nikhil Sontakke
Some tweaks by me
Diffstat (limited to 'src/backend/utils/adt/ruleutils.c')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 64ba8ec8917..3beed37dd26 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -1332,7 +1332,10 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand, prettyFlags, 0); /* - * Now emit the constraint definition. There are cases where + * Now emit the constraint definition, adding NO INHERIT if + * necessary. + * + * There are cases where * the constraint expression will be fully parenthesized and * we don't need the outer parens ... but there are other * cases where we do need 'em. Be conservative for now. @@ -1340,7 +1343,9 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand, * Note that simply checking for leading '(' and trailing ')' * would NOT be good enough, consider "(x > 0) AND (y > 0)". */ - appendStringInfo(&buf, "CHECK (%s)", consrc); + appendStringInfo(&buf, "CHECK %s(%s)", + conForm->connoinherit ? "NO INHERIT " : "", + consrc); break; } |