PostgreSQL 将字符串类型的列转为数组

在学习 PostgreSQL 的时候,对于数组类型,之前是直接用了 varchar(2550) 来存储,想将其转换成 bigint[],期间遇见了 DDL 语句处理已存在的数据无法使用 SELECT 和转换过程中遇见不符合规范的数据会报错之类的一些问题,这里是一些问题解决的方案,和更改类型前后的对比。

仅修改字段类型的语句

如果只是修改字段类型的话很简单,使用普通的 DDL 就行。参考 ALTER TABLE

1
2
ALTER TABLE <table>
ALTER COLUMN <column> TYPE bigint[];

Read More

PostgreSQL 默认排序

刚刚接触到号称功能最强大的开源数据库 PostgreSQL,发现在不加 ORDER BY 的情况下每次查询返回的结果顺序都不一致,推测以下两种情况可能会导致。

JOIN 导致结果顺序随机

第一个遇见的每次查询结果顺序都不一致的 SQL 大致如下:

1
2
3
4
5
SELECT a.id, b.id, c.id
FROM table_a a
INNER JOIN table_b b on a.b_id = b.id
INNER JOIN table_c c on a.c_id = c.id
LIMIT 20

Read More

浮点运算

浮点数格式

格式 符号 指数 有效数 总长 指数偏移 精确度(二进制) 精确度(十进制) C++类型
单精度 1 8 23 32 127 24 ~7 float
双精度 1 11 52 64 1023 53 ~16 double
扩展双精度 1 15 64 80 16383 64 ~19 long double
四倍精度 1 15 112 128 16383 113 ~34 long double, __float128, _Quad

Read More