postgresql用sql语句查询表结构

2023-11-08

用到的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 这个字段已经被删除了,不再有效。
注意:

如果字段类型为变长类型(如varchar),那么在atttypmod中存储的长度比实际长度多4。可见参考文档1。
如果字段类型为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

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

       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查询表字段的定义

       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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Postgresql:删除某些类型的数字之间的空格

    我有一列地址 例如 01031 970 S o Paulo SP BR 我想删除邮政编码之间的空格 邮政编码可以出现在地址的任何位置 例如 S o Paulo 01031 970 SP BR 结果应该是 S o Paulo 01031970
  • QGIS 和 PostGIS(地图点(美国地图上的纬度和经度以及半径)

    我安装了QGIS和PostGIS 我想在美国地图上以 100 英里为半径显示 200 个点 我已将纬度和经度导入 PostGIS 数据库中 所以我有三个字段 地址 纬度 经度 1 我需要将纬度和经度字段转换为点或几何字段吗 如果是这样怎么办
  • 如何通过迁移向现有索引添加“唯一”约束

    我怎样才能添加unique true对 Rails 数据库中已有索引的约束 我尝试通过以下方式迁移 def change add index editabilities user id list id unique true end 但迁移
  • Golang:使用像 Node.js 中那样的可读流从 PostgreSQL 数据库中选择几百万行

    我有大约 5000 万行的 PostgreSQL 表 我想编写 Go 代码来从该表中选择大约 100 万行 并以有效的方式处理它们 上次我使用了nodejs和这个NPM模块pg 查询流 https www npmjs com package
  • 在 Docker 中更改 Ubuntu 语言环境

    因此 我正在 pt BR 中使用 Ubuntu 和 Postgresql 设置 docker 映像 我想知道如何通过命令行更改默认区域设置而不重新启动系统 这在 Docker 构建中是不可能的 我设法在 Debian 中通过更改 LANG
  • PDO 从 Postgres 获取小数秒

    当我查询日期时间字段时postgresql 9 6 用一个简单的 pdo 语句 PHP7 sql SELECT date FROM table stmt adapter gt createStatement sql stmt gt prep
  • Hibernate 使用大量线程

    在我的独立应用程序中 一次性生成超过 1000 个线程 每个线程都有自己的 Hibernate 会话 但在这种情况下 会话计数超过数据库最大连接限制 从而引发错误 我尝试过设置 getCurrentSession 代替 openSessio
  • 我截断了一个表。我如何取回数据?

    在我的 postgresql 数据库中 不幸的是我截断了表mail group 并且该表已从数据库中删除 如何找回该表 请帮助我 等待回复 Thanks 其他有同样情况的人 立即地停止你的数据库pg ctl stop m immediate
  • 使用 Rails 4(和 Hstore)在 PostgreSQL 中存储嵌套哈希

    我有一个 Rails 应用程序 它聚合了来自 Google API 的大量数据 我当前将 JSON 响应存储在 MongoDB 中 因此我的 Rails 应用程序同时具有 pg 和 mongo 然而 今天 我遇到了 PostgreSQL H
  • Django基于PK和另一个字段保存对象

    我正在尝试将 postgresql 中的分区表与 Django 安装一起使用 通过Google搜索主题 我发现Django本身不支持分区 所以我自己对表进行了分区 我根据第二个字段对表进行分区 该字段是另一个表上的外键 基本模型设置如下 c
  • 代表 PostgreSQL 中的未来时间

    我习惯于将过去的日期作为 UTC 存储在数据库中 因为那实际上是事件发生的时间 对于未来的日期 我会将其与特定时区一起存储 以避免诸如闰秒或时区规则更改之类的更改 Postgres 有timestamp with timezone 但在幕后
  • 如何使用 ActiveRecord 列出所有数据库

    我希望能够使用 ActiveRecord 列出所有数据库 因此 我需要在终端中使用与以下命令等效的 ActiveRecord psql host 192 168 0 100 port 5432 username postgres list
  • psycopg2 - 无密钥连接

    我正在尝试通过以下方式同时将项目插入到 postgres 表中ThreadedConnectionPool 但我不断得到psycopg2 pool PoolError trying to put unkeyed connection 不知道
  • postgresql 中的咨询锁超时

    我正在从 ORACLE 迁移 目前我正在尝试移植此呼叫 lkstat DBMS LOCK REQUEST lkhndl DBMS LOCK X MODE lktimeout true 这个功能 http docs oracle com cd
  • 在 INSERT INTO....RETURNING 上添加 LEFT JOIN

    我的查询插入一个值并返回插入的新行 INSERT INTO event comments date posted e id created by parent id body num likes thread id VALUES 15757
  • 撤销角色对 postgres 数据库的访问权限

    我为某个用户创建了一个单独的角色 newrole 和新模式 newschema 该用户应该只执行一些存储的函数 我已设法撤销对当前数据库的模式 public 的访问权限 以 newrole 身份登录 我仍然可以访问 postgres 数据库
  • (一张表)插入行

    这个问题是继续this one https stackoverflow com questions 56246041 one table get rows not in without union 我有下表egr offid groupid
  • PostgreSQL: 月 := 间隔 '30 天';

    尝试从 2 个表中删除超过 1 个月的记录 其中 1 引用另一个表中的 id 列 create or replace function quincytrack clean returns void as BODY begin month i
  • Postgresql 在 where 子句中转义单引号 [重复]

    这个问题在这里已经有答案了 所以我尝试运行这样的脚本 select id from owner where owner name john s 我收到此错误 ERROR column john s does not exist 我也尝试过这
  • sqlalchemy JSON查询没有特定键的行(键存在)

    当将 sqlalchemy 与 postgresql 一起使用时 我有以下表格和数据 id data 1 2 a 1 2 rows 如何找到没有键的行 例如 a 还是数据 a Give me all objects that does no

随机推荐

  • js怎样判断引用类型和值类型?

    1 typeof 输出的类型 console log typeof y undefined console log typeof 101 number console log typeof hello string console log
  • 如何使用logging生成日志

    GiantPandaCV导语 日志对程序执行情况的排查非常重要 通过日志文件 可以快速定位出现的问题 本文将简单介绍使用logging生成日志的方法 logging模块介绍 logging是python自带的包 一共有五个level deb
  • https 访问 iframe 的http

    最近做的项目要求https 嵌入http的项目 浏览器老是提示https不能访问http 为了满足需求 在本地项目中添加了nginx转发服务 将项目中的iframe 转发为https 再又nginx将https转发至http 满足需求了 n
  • 1. 经验累积分布函数

    为了说明经验累积分布函数 我们这里使用一个学生成绩的数据集 假设班有50名学生 这些学生刚刚进行了一个测试 这个测试的结果是以0 100的分数来体现的 我们要如何更好的可视化结果呢 例如确定成绩的最大值和最小值 对于这个数据的可视化 我们可
  • jar包修改并重新打包,jar包反编译使用工具以及修改代码方法

    jar包修改并重新打包 jar包反编译使用工具以及修改代码方法 备忘 https blog csdn net tomcat zhu article details 79240011
  • unity中的reflectionProbe的使用

    下面说一下Reflection Probe 大家都知道 当使用标准着色器时 每一个材质都会具有一定程度的镜面反射 specularity 和金属反射 metalness 属性 在没有强大的硬件来处理即时光迹追踪反射的情况下 我们得仰赖预先计
  • 8.bidirectional_recurrent_neural_network

    import torch import torch nn as nn import torchvision import torchvision transforms as transforms device torch device cu
  • 电源升降压芯片电路归纳(归纳中。。。)

    注 学习硬件做的总结 大神勿喷 有不足之处还望不吝赐教 目录 电源升压5v芯片归纳 PS7516电路 NCP1400ASN50电路 PL2628电路 FP6276B电路 PL2303电路 PS3120A电路 QX2301LXXE电路 电源升
  • Opencv快速入门教程,Python计算机视觉基础

    快速入门 OpenCV 是 Intel 开源计算机视觉库 它由一系列 C 函数和少量 C 类构成 实现了图像处理和计算机视觉方面的很多通用算法 OpenCV 拥有包括 300 多个 C 函数的跨平台的中 高层 API 它不依赖于其它的外部库
  • 用java解一元二次方程组

    System out print 求 ax 2 bx c 0的根 n Scanner in new Scanner System in 定义变量 while true System out println 请输入a的值 int a in n
  • RT-Thread开发GD32F450 添加adc外设

    开发板使用的是gd32f450zk env工具使用的版本是1 3 5 rtthread版本是5 0 0 添加adc外设的步骤如下 步骤1 查看开发板的电路原理图 确定adc的使用引脚 使用的是引脚PF6 即adc012 IN4 如下图 步骤
  • 设计模式:状态机模式

    首先状态机模式是处理一个类在内部状态改变的时候 其方法处理信息的模式也会改变 这里说一个在RTS游戏里的应用 有限状态机 我们要赋予每个战斗单位一个智能 比如一定范围内检测到地方单位 且自身处于游荡或者Patrol状态 那么就转换为攻击状态
  • [MAC各类右键菜单修改]Automator WorkFlow: 扩展右键菜单

    一 前 废 言 话 Automator是我最喜欢的OS X预装程序之一 能轻松以简单的拖拽创建一个工作流程 WorkFlow 也能用AppleScript和终端Shell辅助完成操作 这篇帖子主要分享我最近写的一些Automator工作流程
  • JAVA NIO 基础

    原文地址 http www iteye com topic 834447 1 基本 概念 IO 是主存和外部设备 硬盘 终端和网络等 拷贝数据的过程 IO 是操作系统的底层功能实现 底层通过 I O 指令进行完成 所有语言运行时系统提供执行
  • 六、ARP协议

    一 ARP 地址解析协议 Address Resolution Protocol 是将IP地址解析为MAC地址的协议 ARP没有IP封装 Type为0X0806 ARP不能穿越路由器 不能被转发到其他广播域 ARP分为 1 正向ARP IP
  • mpvue的入门

    奔三路学习网移动版 首页 vue面试通 前端面试通 大前端知识 挨踢职场 找前端工作 搜索 主页 gt vue面试通 gt 开源框架 gt mpvue菜鸟踩坑吃鸡篇一 时间 2018 04 25 11 46 来源 未知 作者 admin 点
  • mysql show table column_Mysql 常用show命令 show table-奇乐网

    Mysql 常用show命令 show tables或show tables from database name或show database name tables 解释 显示当前数据库中所有表的名称 show databases 解释
  • leetcode 535. Encode and Decode TinyURL(对URL编解码)

    Note This is a companion problem to the System Design problem Design TinyURL TinyURL is a URL shortening service where y
  • 搞懂一般的stacking和blending只需一张图片

    搞懂一般的stacking和blending只需一张图片 搞不懂我把这张图片的纸吃了 下面再简单参考一下其他博主的对于这两种集成方法的比较 Blending的优点在于 1 比stacking简单 因为不用进行k次的交叉验证来获得stacke
  • postgresql用sql语句查询表结构

    用到的postgresql系统表 关于postgresql系统表 可以参考PostgreSQL 8 1 中文文档 系统表 pg class 记录了数据库中的表 索引 序列 视图 关系 其中比较重要字段有 relname 表 索引 视图等的名