postpresql 查询某张表的字段名和字段类型
postpresql 查询某张表的字段名和字段类型
工作中第一次接触postpresql,接触到这么个需求,只是对sql有点了解,于是就网上查阅资料。得知通过系统表可以查询,设计到几张系统表:pg_class、pg_attrubute、information_schema.columns 。
其中pg_class 这张表记录了所有表或者像表的东西。包括表、索引、视图、物化视图、组合类型和TOAST表。其中一些字段的含义如下表所示。
pg_class
| 字段名 | 字段描述 |
|---|---|
| oid | 表的唯一标识符(Object ID) |
| relname | 表的名称 |
| relnamespace | 表所属的命名空间(pg_namespace 表的 oid) |
| reltype | 表的类型。对于表,这通常是 pg_type 表中的 oid |
| reloftype | 对于复合类型的表,它表示相关联的基础类型 |
| relowner | 表的所有者(用户的 oid) |
| relam | 索引使用的存储方法的 oid |
| relfilenode | 表在磁盘上的文件节点号 |
| reltablespace | 表所在的表空间的 oid |
| relpages | 表占用的页数 |
| reltuples | 表中的元组数。 |
| reltoastrelid | 如果存在,指向 pg_class 中的 TOAST 表的 oid |
| reltoastidxid | 如果存在,指向 TOAST 表的索引的 oid |
| relhasindex | 表是否有索引 |
| relisshared | 表是否是共享的 |
| relpersistence | 表的持久性(永久的还是临时的) |
| relkind | 表的类型,可能是 ‘r’(表)、‘i’(索引)等 |
| relchecks | 表约束的数量 |
| reltriggers | 表触发器的数量 |
| relhasrules | 表是否有规则 |
| relhasoids | 表是否有 OIDs(Object Identifiers) |
pg_attrubute
这张表包含了有关表的每一列的详细信息,例如数据类型、是否为空等。
| 字段名 | 字段描述 |
|---|---|
| attrelid: | 属性所属的表的 OID。 |
| attname: | 列名。 |
| atttypid | 列的数据类型的 OID,对应于 pg_type 表中的 oid。 |
| attstattarget | 用于统计信息的目标值。 |
| attlen | 列的长度(以字节为单位)。 |
| attnum | 列的序号。正整数表示用户定义的列,0 表示系统列。 |
| attndims | 数组的维数,如果不是数组则为 0。 |
| attcacheoff | 用于计算偏移量的缓存位置。 |
| atttypmod | 类型修饰符。对于 varchar(n) 这样的类型,它存储 n 的值。 |
| attbyval | 如果列的传递是按值传递,则为 true;否则为 false。 |
| attstorage | 列的存储方式(‘p’ 表示普通、‘e’ 表示外部、‘m’ 表示主内存)。 |
| attalign | 列的对齐方式(‘c’ 表示 CHAR、‘s’ 表示 SHORT、‘i’ 表示 INT、‘d’ 表示 DOUBLE)。 |
| attnotnull | 如果列不允许为空,则为 true;否则为 false。 |
| atthasdef | 如果列有默认值,则为 true;否则为 false。 |
| attisdropped | 如果列已被删除,则为 true;否则为 false。 |
| attislocal | 如果列是表的本地列,则为 true;否则为 false。 |
| attinhcount | 列是否继承自父表。 |
| attcollation | 列的排序规则的 OID。 |
| attacl | 列的访问控制列表。 |
| attoptions | 列的选项。 |
| attfdwoptions | 表示列是否有存储外部化的选项。 |
| attmissingval | 缺失值。 |
原本的想法,或者说是拿到的代码。要查的是adb_task_daily_detail_log 这张表的字段类型和数据
-- 取字段名和字段类型
select
a.attname as name,
format_type(a.atttypid,a.atttypmod) as type,
col_description(a.attrelid,a.attnum) as comment,
a.attnotnull as notnull
from
pg_class as c,
pg_attribute as a
where
c.relname='adb_task_daily_detail_log'
and
a.attrelid=c.oid -- 关联条件
and
a.attnum>0;
问题出现了,对于adb_task_daily_detail_log这张表,pg_class出现了2条记录。
查了半天也搞不懂为什么有两条记录,如果有大哥知道的话请指导下小弟。
有说多一条索引,就会多一条记录,但是这张表也没有索引。
有说表记录了TOAST相关的信息也会多存储一条relkind =‘t’ 的记录,但是这两条记录都是’r’。
所以后果就是查询出来的字段数量会重复。
方式2:
查information_schema.columns
information_schema.columns 是 PostgreSQL 中的系统视图之一,它存储了数据库中所有表的列信息。这个视图允许用户查询表的元数据,包括列名、数据类型、是否为主键、是否允许为空等。
| 字段名称 | 字段描述 |
|---|---|
| table_catalog | 表所属的数据库名称。 |
| table_schema | 表所属的模式(Schema)名称。 |
| table_name | 表的名称。 |
| column_name | 列的名称。 |
| ordinal_position | 列在表中的位置,从 1 开始。 |
| column_default | 列的默认值。 |
| is_nullable | 如果列允许为 NULL,则为 “YES”;否则为 “NO”。 |
| data_type | 列的数据类型。 |
| character_maximum_length | 如果数据类型是字符型,则是字符的最大长度。 |
| character_octet_length | 字符的八位字节长度。 |
| numeric_precision | 如果数据类型是数字型,则是精度。 |
| numeric_precision_radix | 数字的基数(通常为 10)。 |
| numeric_scale | 如果数据类型是数字型,则是小数点后的位数。 |
| datetime_precision | 如果数据类型是日期时间型,则是小数秒的位数。 |
| interval_type | 如果数据类型是间隔型,则是间隔类型。 |
| interval_precision | 如果数据类型是间隔型,则是间隔的精度。 |
| character_set_catalog | 字符集所属的数据库名称。 |
| character_set_schema | 字符集所属的模式名称。 |
| character_set_name | 字符集的名称。 |
| collation_catalog | 校对规则所属的数据库名称。 |
| collation_schem | 校对规则所属的模式名称。 |
| collation_name | 校对规则的名称。 |
| domain_catalog | 如果列是域类型的基础类型,则是基础类型所属的数据库名称。 |
| domain_schema | 如果列是域类型的基础类型,则是基础类型所属的模式名称。 |
| domain_name | 如果列是域类型的基础类型,则是基础类型的名称。 |
select column_nameconcat(data_type,case when character_maximum_length is not null then '(' || character_maximum_length || ')'else ''end) as typefrom information_schema.columns
where table_name ='adb_task_daily_detail_log';
为了要使得数据类型和长度一起显示 做了一个拼接,但是只有字符类型的数据才会被拼接。需求是对数字类型的数字也拼接。
format_type 这个函数得到的数据就是满足要求的。
方式3:
select attname as nameformat_type (atttypeid,atttypmod) as typefrompg_attributewhereattrelid ='adb_task_daily_detail_log'::regclass and attnum>0;
::regclass是 PostgreSQL 的类型转换语法。它将一个标识符(在这里是字符串'adb_task_daily_detail_log')转换为regclass类型。attrelid是pg_attribute表中的一个字段,表示属性(列)所属的表的 OID。
所以,attrelid = 'adb_task_daily_detail_log'::regclass 这个条件是在过滤 pg_attribute 表的记录,只选择属于名为 'adb_task_daily_detail_log' 的表的记录。
这样做是因为在 PostgreSQL 中,每个表都有一个唯一的 OID,而 pg_attribute 表存储了关于表的每个列的信息。通过检查 attrelid,我们可以限制结果只包括特定表的列信息。
相关文章:
postpresql 查询某张表的字段名和字段类型
postpresql 查询某张表的字段名和字段类型 工作中第一次接触postpresql,接触到这么个需求,只是对sql有点了解,于是就网上查阅资料。得知通过系统表可以查询,设计到几张系统表:pg_class、pg_attrubute、information_sc…...
jetson NX部署Yolov8
一,事情起因,由于需要对无人机机载识别算法进行更新,所以需要对yolov8算法进行部署到边缘端。 二,环境安装 安装虚拟环境管理工具,这个根据个人喜好。 我们需要选择能够在ARM架构上运行的conda,这里我们选择conda-forge 下载地址 安装即可 剩下的就是和conda 创建虚拟…...
【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks
【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks 论文阅读笔记论文信息摘要背景方法结果额外 关键发现作者动机相关工作1. 使用输入和编辑图像的对齐和详细描述来执行特定的编辑2. 另一类图像编辑模型采用输入掩码作为附加输入 。3. 为…...
python:列表的拷贝详解
python:列表的拷贝详解 文章目录 python:列表的拷贝详解方法1:直接赋值()方法2:浅拷贝(.copy方法)格式原理注意 方法3:深拷贝(.deepcopy方法)格式…...
zip4j压缩使用总结
一、引入依赖 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.1</version></dependency>二、使用添加文件(addFiles)的方式生成压缩包 /*** Author wan…...
【第一部分:概述】ARM Realm Management Monitor specification
目录 概述机密计算系统软件组成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 参考文献 概述 RMM是一个软件组件,它构成了实现ARM…...
切换服务器上自己用户目录下的 conda 环境和一个外部的 Conda 环境
如果我们有自己的 Miniconda 安装和一个外部的 Conda 环境(比如一个全局安装的 Anaconda),我们可以通过修改 shell 环境来切换使用它们。这通常涉及到更改 PATH 环境变量,以便指向你想要使用的 Conda 安装的可执行文件:…...
移动端的自动化基于类实现启动一次应用跑全部用例
1.unittest框架 class TestStringMethods(unittest.TestCase): def setUp(self) -> None: # 每一条测试用例开始前执行 print("setup") def tearDown(self) -> None: # 每一条测试用例结束后执行 print("teardown") …...
Python与设计模式--抽象工厂模式
Python与设计模式–抽象工厂模式 一、快餐点餐系统 想必大家一定见过类似于麦当劳自助点餐台一类的点餐系统吧。在一个大的触摸显示屏上,有三类可以选择的上餐品:汉堡等主餐、小食、饮料。当我们选择好自己需要的食物,支付完成后࿰…...
JSP:MVC
一个好的Web应用: 功能完善、易于实现和维护易于扩展等的体系结构 一个Web应用通常分为两个部分: 1. 由界面设计人员完成的表示层(主要做网页界面设计) 2. 由程序设计人员实现的行为层(主要完成本Web应用的各种功能…...
微服务-京东秒杀
1 项目介绍 技术栈 后端 SpringCloud 中Netflix 五大组件: EurekaRibbonHystrixOpenfeignZuul SpringBootSpringSpringMVCMyBatis 数据库 MySQLRedis 前端 html5cssjsjQuery 消息中间件 RabbitMQ 2 项目搭建 项目分析 后端 shop-parent [pom] (商…...
「MACOS限定」 如何将文件上传到GitHub仓库
介绍 本期讲解:如何在苹果电脑上上传文件到github远程仓库 注:写的很详细 方便我的朋友可以看懂操作步骤 第一步 在电脑上创建一个新目录(文件夹) 注:创建GitHub账号、新建github仓库、git下载的步骤这里就不过多赘…...
python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny)
python opencv 边缘检测(sobel、沙尔算子、拉普拉斯算子、Canny) 这次实验,我们分别使用opencv 的 sobel算子、沙尔算子、拉普拉斯算子三种算子取进行边缘检测,然后后面又使用了Canny算法进行边缘检测。 直接看代码,代…...
【Unity入门】鼠标输入和键盘输入
Unity的Input类提供了许多监听用户输入的方法,比如我们常见的鼠标,键盘,手柄等。我们可以用Input类的接口来获取用户的输入信息 一、监听鼠标输入 GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton input.GetMouseButtonDown和 inp…...
芯知识 | MP3语音芯片IC的优势特征及其在现代科技应用中的价值
随着科技的飞速发展,MP3语音芯片作为一种高度集成的音频处理解决方案,在现代电子产品中发挥着越来越重要的作用。本文将分析MP3语音芯片的优势特征,并探讨其在各个领域的应用价值。 一、MP3语音芯片的优势特征 MP3语音芯片具有多种显著的优…...
C语言进阶之路-基本数据小怪篇
目录 一、学习目标: 二、数据基本类型 整型 浮点型 / 实型 字符 字符串 布尔型数据 三、重要的杂七杂八知识点 常量与变量 标准输入 sizeof运算符: 类型转换 数据类型的本质 整型数据尺寸 可移植性整型 拿下第一个C语言程序 总结 一、学…...
【OpenCV实现图像:使用OpenCV生成拼图效果】
文章目录 概要通用配置不考虑间隔代码实现考虑间隔代码实现小结 概要 概要: 拼图效果是一种将图像切割为相邻正方形并重新排列的艺术效果。在生成拼图效果时,可以考虑不同的模式,包括是否考虑间隔和如何处理不能整除的部分。 不考虑间隔&a…...
【AOSP】生成签名文件release key,通过Android源码对apk进行签名
简介 现在apk都需要签名,Flutter做的项目官方规定编译apk必须签名。 签名的好处: 应用来源验证: 应用签名允许Android系统验证应用的来源。每个应用都使用开发者的私钥进行签名,而应用的签名信息包含在应用的APK文件中。当用户尝…...
深度学习之基于Tensorflow银行卡号码识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介银行卡号码识别的步骤TensorFlow的优势 二、功能三、系统四. 总结 一项目简介 # 深度学习基于TensorFlow的银行卡号码识别介绍 深度学习在图像识别领域取得…...
第95步 深度学习图像目标检测:Faster R-CNN建模
基于WIN10的64位系统演示 一、写在前面 本期开始,我们学习深度学习图像目标检测系列。 深度学习图像目标检测是计算机视觉领域的一个重要子领域,它的核心目标是利用深度学习模型来识别并定位图像中的特定目标。这些目标可以是物体、人、动物或其他可识…...
485AI语音识别模块:打字免编程,多设备串口直连控制
485AI语音识别模块,本质上是将智能语音识别(AI)与工业级通信(RS485)合二为一的控制核心。核心是将人声指令转为标准Modbus/485数据,直接控制工业设备、PLC、电机、灯光等,无需联网、低延迟、抗干扰强。一、核心通信特性标准RS485总线接口&…...
ARCore增强图像开发实战:从原理到商业应用
1. ARCore增强图像应用开发概述在移动应用开发领域,增强现实(AR)技术正以前所未有的速度改变着我们与数字内容的交互方式。作为Google推出的AR开发平台,ARCore的Augmented Images功能允许开发者创建能够识别特定平面图像并叠加数字内容的应用程序。这种技…...
杨立昆的「秘密厨房」:JEPA 到底在煮什么?——从 LeJEPA 到 EchoJEPA 的全面解读
基于 bycloud 视频解读,结合 LeJEPA、EchoJEPA、V-JEPA 2 等最新论文深度研读 视频原链接:What Is Yann LeCun Cooking? JEPA Explained Simply 一个 AI 界的"异端" 2025 年 9 月,纽约大学的一场研讨会上,Meta 首席 A…...
从‘搬货上车’到‘信号上车’:用大白话讲透ZPW-2000轨道移频的调制原理
从‘搬货上车’到‘信号上车’:用大白话讲透ZPW-2000轨道移频的调制原理 想象一下你站在火车站台,看着一列列火车呼啸而过。这些钢铁巨兽如何安全有序地运行?背后隐藏着一套精密的"对话系统"——轨道电路信号传输。今天我们就用最生…...
从FPGA探索到IC后端:我是如何用OpenROAD开启开源芯片设计之旅的
从FPGA到GDSII:一位工程师的开源芯片设计探索手记 第一次在屏幕上看到自己设计的电路变成硅片上的物理结构时,那种震撼感至今难忘。作为一名长期与FPGA打交道的硬件工程师,我习惯了在可编程逻辑的抽象世界里遨游,直到偶然接触到Op…...
TrollInstallerX深度解析:iOS内核漏洞利用与系统级安装架构揭秘
TrollInstallerX深度解析:iOS内核漏洞利用与系统级安装架构揭秘 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 在iOS 14.0至16.6.1设备上部署TrollStore面临…...
WindowResizer终极指南:如何强制调整任意Windows窗口大小
WindowResizer终极指南:如何强制调整任意Windows窗口大小 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾遇到过那些"顽固"的Windows应用程序窗口&a…...
Kimi K2.6 深夜正式发布:对标 Opus 4.6,刷新开源编程天花板(2026.04.21)
🤵♂️ 个人主页:小李同学_LSH的主页 ✍🏻 作者简介:LLM学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
Phi-4-mini-flash-reasoning零基础上手:无需代码的推理任务执行流程
Phi-4-mini-flash-reasoning零基础上手:无需代码的推理任务执行流程 1. 认识Phi-4-mini-flash-reasoning Phi-4-mini-flash-reasoning是一款专为文本推理任务优化的轻量级AI模型,特别适合需要逐步分析和逻辑推导的场景。不同于常见的聊天机器人&#x…...
2025最权威的AI辅助写作平台实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 1. 在内容创作里头,降低人工智能生成内容所占比例,也就是降低AIGC率&…...
