can tell me, why double-quoted types behave differently in posqtgresql?
create table foo1 (pk int4); -- ok create table foo2 (pk "int4"); -- ok create table foo3 (pk int); -- ok create table foo4 (pk "int"); -- fail: type "int" not exist create table foo5 (pk integer); -- ok create table foo6 (pk "integer"); -- fail: type "integer" not exist
i can't find in documentation. bug? information appreciated
double quotes mean identifier interpreted written. cause case preserved instead of flattened, , allow otherwise keyword interpreted identifier.
postgresql's int
parse-time transformation integer
type. there not data type named int
in system catalogs:
regress=> select typname pg_type typname = 'int'; typname --------- (0 rows)
it instead handled parse-time transformation keyword. when protect transformation quoting it, you're telling db real type name.
this can't undone in backward compatible way, since it'd break someone's system if created type or table named "int"
. (types , tables share same namespace).
this similar how user
transformed current_user
. rails developers use user
model name, causes rails try select * user;
in db, transformed @ parse time select * current_user;
, causing confused users wonder why table has single row username in it. query generators should always quote identifiers, i.e. should generating select * "user";
... few do.
Comments
Post a Comment