它存儲在pg_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 ;
非常感謝。 這段代碼片段是從information_schema.columns視圖定義中提取的嗎? – Rdbhost 2010-07-28 13:46:58
是的,也是從這個觀點使用的功能。使用pg_view和pg_proc來獲取細節。 – 2010-07-28 13:50:22
它幫助了我,謝謝 – 2015-03-31 17:08:40