用到的postgresql系统表

关于postgresql系统表,可以参考PostgreSQL 8.1 中文文档-系统表

pg_class

记录了数据库中的表,索引,序列,视图("关系")。

其中比较重要字段有:

  • relname 表,索引,视图等的名字。
  • relnamespace 包含这个关系的名字空间(模式)的 OID,对应pg_namespace.oid
  • relkind r = 普通表,i = 索引,S = 序列,v = 视图, c = 复合类型,s = 特殊,t = TOAST表

pg_namespace

记录了数据库的名字空间(模式)

其中比较重要的字段有:

  • nspname 名字空间的名字
  • nspowner 名字空间的所有者

pg_attribute

记录了数据库关于表的字段的信息。

其中比较重要的字段有:

  • attrelid 此列/字段所属的表,对应于pg_class.oid
  • attname 字段名字
  • atttypid 这个字段的数据类型,对应于pg_type.oid
  • attlen 对于定长类型,typlen是该类型内部表现形式的字节数目。 对于变长类型,typlen 是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字串。是本字段类型 pg_type.typlen 的拷贝。
  • attnum 字段数目。普通字段是从 1 开始计数的。系统字段, 比如 oid, 有(任意)正数。
  • atttypmod atttypmod 元组在创建表的时候 提供的类型相关的数据(比如,一个 varchar 字段的最大长度)。 它传递给类型相关的输入和长度转换函数当做第三个参数。 其值对那些不需要 atttypmod 的类型而言通常为 -1。
  • attnotnull 这代表一个非空约束。我们可以改变这个字段以打开或者关闭这个约束。
  • attisdropped 这个字段已经被删除了,不再有效。

注意:

  1. 如果字段类型为变长类型(如varchar),那么在atttypmod中存储的长度比实际长度多4。可见参考文档1
  2. 如果字段类型为numeric,那么可通过atttypmod获得长度、精度等信息,具体方式可见参考文档2

pg_type

记录了数据库有关数据类型的信息。

其中比较重要的字段有:

  • typname 数据类型名字
  • typlen 对于定长类型,typlen是该类型内部表现形式的字节数目。 对于变长类型,typlen 是负数。 -1 表示一种"变长"类型(有长度字属性的数据), -2 表示这是一个 NULL 结尾的 C 字串。

pg_description

记录了数据库中对象(表、字段等)的注释。

其中比较重要的字段有:

  • objoid 这条描述所描述的对象的 OID。如果这条注释是一个表或表中字段的注释,那么,该值对应于pg_class.oid
  • objsubid 对于一个表字段的注释,它是字段号,对应于pg_attribute.attnum。对于其它对象类型,它是零。
  • description 作为对该对象的描述的任意文本

查询用户表

SELECT a.oid,
a.relname AS name,
b.description AS comment
FROM pg_class a
LEFT OUTER JOIN pg_description b ON b.objsubid=0 AND a.oid = b.objoid
WHERE a.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname='public') --用户表一般存储在public模式下
AND a.relkind='r'
ORDER BY a.relname

使用表名查询表字段的定义

SELECT a.attnum,
a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_class c,
pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE c.relname = 'zc_zclx'
and a.attnum > 0
and a.attrelid = c.oid
and a.atttypid = t.oid
ORDER BY a.attnum

使用表oid查询表字段的定义

SELECT a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE a.attnum > 0
and a.attrelid = 162903
and a.atttypid = t.oid
ORDER BY a.attnum

参考文档

  1. PostgreSQL 9.0 modify pg_attribute.atttypmod extend variable char length avoid rewrite table
  2. PostgreSQL How can i decode the NUMERIC precision and scale in pg_attribute.atttypmod

postgresql用sql语句查询表结构的更多相关文章

  1. SQL语句查询表结构

    SQL语句查询表结构   刚刚在做一个小项目,数据库中一张表有20来个字段,用我以前做的一个.NET实体类生成器一个一个的输入还是闲麻烦,于是打算找个时间来重新的改造一个那个.NET实体类,能够通过选 ...

  2. SQL语句 & 查询表结构

    [group by] 对结果集进行分组,常与汇总函数一起使用. SELECT column,SUM(column) FROM table GROUP BY column HAVING 通常与 GROU ...

  3. Sql 2000系统表 语句查询表结构

     SQL2000系统表的应用  –1:获取当前数据库中的所有用户表 select Name from sysobjects where xtype=’u’ and status>=0 –2:获取 ...

  4. sql server 查询表结构

    --查询表结构start SELECT 序号 = a.colorder,字段名称 = a.name,字段描述 = f.value, 标识 then '√' else '' end, 主键 FROM s ...

  5. sql语句查询表中重复字段以及显示字段重复条数

    今天跟大家分享两条SQL语句,是关于查询某表中重复字段以及显示该字段的重复条数. 1.select * from 表名 where 列名 in (select 列名 from 表名 group by ...

  6. 使用SQL语句查询表及表字段类型说明

    今天突然遇到有人要数据库表及表字段说明,数据库表太多又不能一个个表去找,就想想SQL是否能直接查询出来. 经过查询资料,加上一些自己的一些调整写了一个sql语句,在此记录一下,以方便日后查找使用. S ...

  7. SQL Server查询表结构语句

    --1:获取当前数据库中的所有用户表   www.2cto.com   select Name from sysobjects where xtype='u' and status>=0  -- ...

  8. PostgreSQL的SQL语句中的双引号引发的问题

    最近开发一个WEB的ETL工具需要用到不同的数据源.第一次用POSTGRESQL发现一个双引号引发的问题: 标准的SQL是不区分大小写的.但是PostgreSQL对于数据库中对象的名字允许使用支持大小 ...

  9. postgresql 字段sql语句 更改表名

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sq8706/article/detail ...

随机推荐

  1. spring-quartz定时器简单用法

    基本配置: 1.quartz.properties #============================================================== #Configure ...

  2. Qt学习之QListWidget删除Item

    将QListWidgetItem从QListWidget列表中删除有两种方法能够做到.但也要依据自己的须要进行选择. 第一种是 QListWidgetItem *takeItem(int row); ...

  3. cocos2D(七)---- CCScene

    CCScene普通情况是游戏里面的根节点.称之为"场景",执行游戏时须要通过CCDirector启动第一个场景. 当然,游戏略微复杂一点的话.可能会包括非常多个场景,这就涉及到场景 ...

  4. Centos 7 Apache编译安装

    1.安装apache ./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so --enable-headers --e ...

  5. ES6 一些常用使用

    //1.解构数组 let arr1 = ['apple', 'coffee', 'cake']; let [fruit, drink, dessert] = arr1; console.log(fru ...

  6. 自己制作Android包括@hide接口的SDK

    Android系统存在一些系统级应用与framework代码耦合较深,编译的时候依赖非常多类里面的@hide接口.这类应用怎么来编译呢?首先我们须要制作一份包括Hide接口的SDK,方法例如以下(以a ...

  7. [模板] BSGS

    BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行 ...

  8. 回顾2017Java 小结

    一.Java语言最流行 最近,调查结果已公布:Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言,Python 是最多人想去尝试的语言. https: ...

  9. luoguP2939 [USACO09FEB]改造路Revamping Trails

    约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路. ...

  10. java enum int String 相互转换

    1.  enum<->int enum -> int: int i = enumType.value.ordinal(); int -> enum: enumType b= e ...