pg中只有少数类型具有固定长度-几乎所有类型都是varlena类型-它具有动态长度。您可以检查类似的查询
postgres=# select typlen from pg_type where oid = 'int'::regtype::oid; typlen -------- 4 (1 row) postgres=# select attlen from pg_attribute where attrelid = 'x'::regclass and attname = 'a'; attlen -------- 4 (1 row)
当结果不是-1时,类型没有固定长度
对于varlena类型,请使用pg_column_size函数:
postgres=# df *size* List of functions Schema | Name | Result data type | Argument data types | Type ------------+------------------------+------------------+---------------------+-------- pg_catalog | pg_column_size | integer | "any" | normal pg_catalog | pg_database_size | bigint| name | normal pg_catalog | pg_database_size | bigint| oid | normal pg_catalog | pg_indexes_size | bigint| regclass | normal pg_catalog | pg_relation_size | bigint| regclass | normal pg_catalog | pg_relation_size | bigint| regclass, text | normal pg_catalog | pg_size_pretty | text | bigint | normal pg_catalog | pg_size_pretty | text | numeric | normal pg_catalog | pg_table_size | bigint| regclass | normal pg_catalog | pg_tablespace_size | bigint| name | normal pg_catalog | pg_tablespace_size | bigint| oid | normal pg_catalog | pg_total_relation_size | bigint| regclass | normal(12 rows) postgres=# select pg_column_size('Hello'); pg_column_size ---------------- 6 (1 row) postgres=# select pg_column_size(10); pg_column_size ---------------- 4 (1 row) postgres=# select pg_column_size(now()); pg_column_size ---------------- 8


