这个PostgreSQL查询实现了什么?

时间:2010-12-18 21:01:31

标签: postgresql

我最近从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

这最后一个查询完成了什么?哪些信息在这里返回?

1 个答案:

答案 0 :(得分:3)

查询正在获取有关表documents的信息。

目录pg_attribute存储有关表列的信息。

目录pg_attrdef存储列默认值。

  • a.attrelid:此列所属的表格。
  • a.attname:列名。
  • a.atttypid:此列的数据类型。
  • a.atttypmod:记录在表创建时提供的特定于类型的数据(例如,varchar列的最大长度)。它被传递给特定类型的输入函数和长度强制函数。对于不需要atttypmod的类型,该值通常为-1。
  • d.adsrc:人类可读的默认值表示。
  • a.attnotnull:这表示非空约束。

例如,ORM可以使用此信息来构建数据库中类和表之间的映射。