Dav*_*vid 7 postgresql information-schema
在PostgreSQL中,表结构的列数据存储在pg_attribute中,pg_class中有几个字段,pg_attrdef中有几个字段.
但我没有看到任何地方存储的NUMERIC字段类型的精度或比例.
它可以在INFORMATION_SCHEMA表中找到,但我试图避免它们,因为它们不使用oid来轻松连接到pg_catalog表.
所以问题是:列精度和比例存储在postgreSQL系统表中的哪个位置?
Fra*_*ens 13
它存储在pty_attribute中的atttypmod列中.视图information_schema.columns中提供了所有信息.此视图使用一些查询来计算值,这些是基本的:
SELECT
CASE atttypid
WHEN 21 /*int2*/ THEN 16
WHEN 23 /*int4*/ THEN 32
WHEN 20 /*int8*/ THEN 64
WHEN 1700 /*numeric*/ THEN
CASE WHEN atttypmod = -1
THEN null
ELSE ((atttypmod - 4) >> 16) & 65535 -- calculate the precision
END
WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/
WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/
ELSE null
END AS numeric_precision,
CASE
WHEN atttypid IN (21, 23, 20) THEN 0
WHEN atttypid IN (1700) THEN
CASE
WHEN atttypmod = -1 THEN null
ELSE (atttypmod - 4) & 65535 -- calculate the scale
END
ELSE null
END AS numeric_scale,
*
FROM
pg_attribute ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4035 次 |
最近记录: |