在Postgresql中计算列类型的大小
我试图找出如何确定数据库中特定列的大小,例如,我有两个名为sourceip、destinationip的列,它们都是16字节字段 我认为这可能在信息模式或\d+中的某个地方,但我找不到一个特定的命令来隔离每种列类型的大小 您可以计算数据库中的列类型大小,还是只需在Postgresql文档中引用每种类型的字节大小在Postgresql中计算列类型的大小,sql,postgresql,Sql,Postgresql,我试图找出如何确定数据库中特定列的大小,例如,我有两个名为sourceip、destinationip的列,它们都是16字节字段 我认为这可能在信息模式或\d+中的某个地方,但我找不到一个特定的命令来隔离每种列类型的大小 您可以计算数据库中的列类型大小,还是只需在Postgresql文档中引用每种类型的字节大小 pg中只有少数类型具有固定长度-几乎所有类型都是varlena类型-它具有动态长度。您可以像这样检查查询 postgres=# select typlen from pg_type w
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