我最近从MySQL切换到PostgreSQL,在注意到许多“常规”查询之后我注意到了一个额外的查询。
在此之后......
SELECT "documents".* FROM "documents" WHERE ("documents"."id" = 1) LIMIT 1
执行:
SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"documents"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
这最后一个查询完成了什么?哪些信息在这里返回?
答案 0 :(得分:3)
查询正在获取有关表documents
的信息。
目录pg_attribute存储有关表列的信息。
目录pg_attrdef存储列默认值。
a.attrelid
:此列所属的表格。a.attname
:列名。a.atttypid
:此列的数据类型。a.atttypmod
:记录在表创建时提供的特定于类型的数据(例如,varchar列的最大长度)。它被传递给特定类型的输入函数和长度强制函数。对于不需要atttypmod的类型,该值通常为-1。d.adsrc
:人类可读的默认值表示。a.attnotnull
:这表示非空约束。 例如,ORM可以使用此信息来构建数据库中类和表之间的映射。