Postgresql 如何创建一个有N个列的表
如果需要创建一个有99列的表,列名都是有规律的比如s01,s02,s03……也许你会想到如下语句 CREATETABLEtb_sxx( s01varchar(10),s02varchar(10),s03varchar(10),…… s99varchar(10) ); 有没有更快捷的方法呢?当然有了,不妨借助一下Postgresql的三个有力函数 为了更直观的理解以下举例(生成一个5列的表),分步说明,如果对上述三个函数很熟悉可直接到第6步: 1.生成1到5之间的数 hotel=>SELECTgenerate_series(1,5); generate_series ----------------- 1 2 3 4 5 (5rows) 2.把1到5的数转成数组 hotel=>SELECTarray_agg(i) hotel->FROMgenerate_series(1,5)ASi; array_agg ------------- {1,4,5} (1row) 3.加工第2步生成的数据,将格式变为{s01,s03,s04,s05} hotel=>SELECTarray_agg('s'||lpad(i::text,'0')) hotel->FROMgenerate_series(1,5)ASi; array_agg ----------------------- {s01,s05} (1row) 解释: 4.加工第3步生成的数据,将其转换为{s01 varchar(10),s02 varchar(10),s03 varchar(10),s04 varchar(10),s05 varchar(10)} 5.加工第4步生成的数据,将其转换成字符串 hotel=>SELECTarray_to_string( hotel(>array_agg('s'||lpad(i::text,'0')||'varchar(10)') hotel(>,') hotel->FROMgenerate_series(1,5)ASi; array_to_string --------------------------------------------------------------------------------- s01varchar(10),s04varchar(10),s05varchar(10) (1row) 6.最终生成建表语句 hotel=>SELECT'CREATETABLEtb_s5('|| hotel->array_to_string( hotel(>array_agg('s'||lpad(i::text,')|| hotel->');' hotel->FROMgenerate_series(1,5)ASi; ?column? -------------------------------------------------------------------------------------------------------- CREATETABLEtb_s5(s01varchar(10),s05varchar(10)); (1row) 至此建表语句就生成了,复制粘贴就可以执行了,如果是psql亦可用下面的将下面的语句保存为 文件内容如下: a t 解释:a 关闭对齐模式t 关闭标行输出g 将查询结果输出到指定文件i 执行文件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |