如何使用psql命令在PostgreSQL中执行Oracle的DESCRIBE TABLE?
当前回答
在MySQL中,DESCRIBE table_name
在PostgreSQL中,\d table_name
或者,可以使用以下长命令:
SELECT
a.attname AS Field,
t.typname || '(' || a.atttypmod || ')' AS Type,
CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
FROM
pg_catalog.pg_attrdef d
WHERE
d.adrelid = a.attrelid
AND d.adnum = a.attnum
AND a.atthasdef) AS Default,
'' as Extras
FROM
pg_class c
JOIN pg_attribute a ON a.attrelid = c.oid
JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid
AND r.conname = a.attname
WHERE
c.relname = 'tablename'
AND a.attnum > 0
ORDER BY a.attnum
其他回答
下面的命令可以简单地描述多个表
\dt <table> <table>
下面的命令可以详细描述多个表:
\d <table> <table>
下面的命令可以更详细地描述多个表:
\d+ <table> <table>
您可以使用星号执行\d*搜索模式*,以查找与您感兴趣的搜索模式匹配的表。
我为get表模式编写了以下脚本。
'CREATE TABLE ' || 'yourschema.yourtable' || E'\n(\n' ||
array_to_string(
array_agg(
' ' || column_expr
)
, E',\n'
) || E'\n);\n'
from
(
SELECT ' ' || column_name || ' ' || data_type ||
coalesce('(' || character_maximum_length || ')', '') ||
case when is_nullable = 'YES' then ' NULL' else ' NOT NULL' end as column_expr
FROM information_schema.columns
WHERE table_schema || '.' || table_name = 'yourschema.yourtable'
ORDER BY ordinal_position
) column_list;
1) 使用psql的PostgreSQL描述表
在psql命令行工具中,使用\d table_name或\d+table_name查找表的列信息
2) PostgreSQL使用information_schema描述表
SELECT语句查询information_schema数据库中列表的column_name、数据类型、字符最大长度;
选择列名称、数据类型、字符最大长度来自INFORMATION_SCHEMA.COLUMNS,其中table_name=“tablename”;
有关详细信息https://www.postgresqltutorial.com/postgresql-describe-table/
在MySQL中,DESCRIBE table_name
在PostgreSQL中,\d table_name
或者,可以使用以下长命令:
SELECT
a.attname AS Field,
t.typname || '(' || a.atttypmod || ')' AS Type,
CASE WHEN a.attnotnull = 't' THEN 'YES' ELSE 'NO' END AS Null,
CASE WHEN r.contype = 'p' THEN 'PRI' ELSE '' END AS Key,
(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid), '\'(.*)\'')
FROM
pg_catalog.pg_attrdef d
WHERE
d.adrelid = a.attrelid
AND d.adnum = a.attnum
AND a.atthasdef) AS Default,
'' as Extras
FROM
pg_class c
JOIN pg_attribute a ON a.attrelid = c.oid
JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_catalog.pg_constraint r ON c.oid = r.conrelid
AND r.conname = a.attname
WHERE
c.relname = 'tablename'
AND a.attnum > 0
ORDER BY a.attnum
推荐文章
- 如何连接列在Postgres选择?
- 数据库触发器是必要的吗?
- 为什么我应该使用基于文档的数据库而不是关系数据库?
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将varchar字段的类型更改为整数:"不能自动转换为整数类型"
- 将值从同一表中的一列复制到另一列
- PostgreSQL可以索引数组列吗?
- 什么是数据库池?
- 关于数据库,每个开发人员应该知道些什么?
- PostgreSQL:角色不允许登录
- "where 1=1"语句
- 如何查找Postgres / PostgreSQL表及其索引的磁盘大小
- 是使用各有一个模式的多个数据库更好,还是使用一个数据库有多个模式更好?
- 如何从Oracle的表中获取列名?
- 如果字符串包含