diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2017-04-06 08:33:16 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2017-04-06 08:41:37 -0400 |
commit | 3217327053638085d24dd4d276e7c1f7ac2c4c6b (patch) | |
tree | 513d1264a2935b05e28b0d8322d73a0411a3d02f /src/backend/utils/cache/lsyscache.c | |
parent | 6bad580d9e678a0b604883e14d8401d469b06566 (diff) |
Identity columns
This is the SQL standard-conforming variant of PostgreSQL's serial
columns. It fixes a few usability issues that serial columns have:
- CREATE TABLE / LIKE copies default but refers to same sequence
- cannot add/drop serialness with ALTER TABLE
- dropping default does not drop sequence
- need to grant separate privileges to sequence
- other slight weirdnesses because serial is some kind of special macro
Reviewed-by: Vitaly Burovoy <vitaly.burovoy@gmail.com>
Diffstat (limited to 'src/backend/utils/cache/lsyscache.c')
-rw-r--r-- | src/backend/utils/cache/lsyscache.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index b891f388e5d..0667ef5a81b 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -837,6 +837,38 @@ get_attnum(Oid relid, const char *attname) } /* + * get_attidentity + * + * Given the relation id and the attribute name, + * return the "attidentity" field from the attribute relation. + * + * Returns '\0' if not found. + * + * Since no identity is represented by '\0', this can also be used as a + * Boolean test. + */ +char +get_attidentity(Oid relid, AttrNumber attnum) +{ + HeapTuple tp; + + tp = SearchSysCache2(ATTNUM, + ObjectIdGetDatum(relid), + Int16GetDatum(attnum)); + if (HeapTupleIsValid(tp)) + { + Form_pg_attribute att_tup = (Form_pg_attribute) GETSTRUCT(tp); + char result; + + result = att_tup->attidentity; + ReleaseSysCache(tp); + return result; + } + else + return '\0'; +} + +/* * get_atttype * * Given the relation OID and the attribute number with the relation, |