Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postgresql中计算列类型的大小_Sql_Postgresql - Fatal编程技术网

在Postgresql中计算列类型的大小

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

我试图找出如何确定数据库中特定列的大小,例如,我有两个名为sourceip、destinationip的列,它们都是16字节字段

我认为这可能在信息模式或\d+中的某个地方,但我找不到一个特定的命令来隔离每种列类型的大小

您可以计算数据库中的列类型大小,还是只需在Postgresql文档中引用每种类型的字节大小


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