You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何查询指定数据表的列属性与字段定义?

PostgreSQL查询users表字段定义的方法

有两种常用方案可以满足你的需求:

方法1:psql命令行客户端专属快捷操作

如果你使用PostgreSQL官方自带的psql命令行工具,切换到test1数据库后直接执行以下命令即可:

\d+ users

返回结果会直接展示所有字段的类型、约束、默认值等全量定义,和你期望的格式高度匹配。

方法2:通用SQL查询(适配所有数据库客户端)

如果使用的是DBeaver、Navicat等第三方客户端,无法使用psql专属命令,可以执行如下SQL查询系统表,直接生成你需要的格式结果:

SELECT 
  column_name || ': ' || 
  data_type || 
  -- 拼接字符串类型长度
  CASE WHEN character_maximum_length IS NOT NULL THEN '(' || character_maximum_length || ')' ELSE '' END ||
  -- 拼接非空约束
  CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END ||
  -- 拼接默认值
  CASE WHEN column_default IS NOT NULL THEN ' DEFAULT ' || column_default ELSE '' END ||
  -- 拼接主键约束
  CASE WHEN EXISTS (
    SELECT 1 FROM pg_constraint 
    WHERE conrelid = 'users'::regclass 
      AND conkey @> ARRAY[ordinal_position] 
      AND contype = 'p'
  ) THEN ' PRIMARY KEY' ELSE '' END AS column_definition
FROM information_schema.columns 
WHERE table_name = 'users' 
  AND table_schema = 'public' -- 若你的表不在public schema,请修改为对应schema名称
ORDER BY ordinal_position;

你给出的示例users表执行上述查询后,返回结果如下:

id: integer NOT NULL DEFAULT nextval('users_id_seq'::regclass) PRIMARY KEY
created_at: timestamp with time zone DEFAULT CURRENT_TIME
updated_at: timestamp without time zone DEFAULT CURRENT_TIME
contents: character varying(240) NOT NULL

注:SERIAL是PostgreSQL的语法糖,本质是integer类型加序列默认值,因此查询结果会展示实际的底层存储规则,如果你需要展示SERIAL字样,调整上述SQL的判断逻辑即可。

如果你需要完整的原始建表语句,可以直接调用内置函数:

SELECT pg_get_tabledef('users');

执行后会直接返回完整的CREATE TABLE语句,和表创建时的语句基本完全一致。

内容的提问来源于stack exchange,提问作者Ken Masters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:39:05