Docker Hub 包含多个版本(标签)的Postgres数据库,例如:
- 12.3、12和latest
- 12.3-alpine、12-alpine和alpine -...
Postgres 版本12.3 和 12.3-alpine 之间有何区别?
Docker Hub 包含多个版本(标签)的Postgres数据库,例如:
Postgres 版本12.3 和 12.3-alpine 之间有何区别?
Alpine是Linux的一个更小版本,使用它可以得到比完整的postgres镜像更小的容器。人们认为由于其体积较小,Alpine也更加安全。尽管Alpine的一个缺点是它比运行完整Linux操作系统的Docker镜像包含的功能要少得多。
在选择数据库的Docker镜像时,您应该非常小心。事实上,Alpine和Debian中的PostgreSQL使用不同的排序规则。
一些Alpine镜像使用musl库版本(1.1.16),它不支持LC_COLLATE,因此尽管设置了LANG变量,数据排序仍将是按字节排序(C)。
LC_COLLATE应该添加到musl版本1.1.17中。
但这可能会带来灾难性的问题:一旦musl支持LC_COLLATE,所有Postgres VARCHAR索引都将被破坏。
请参阅更多讨论:
我自己试过:
FROM postgres:13-alpine
postgres=# select 'a' > 'A';
?column?
----------
t
(1 row)
postgres=# select 'a' < 'A';
?column?
----------
f
(1 row)
FROM postgres:13
postgres=# select 'a' > 'A';
?column?
----------
f
(1 row)
postgres=# select 'a' < 'A';
?column?
----------
t
(1 row)
-e LANG=en-US.utf8 -e POSTGRES_INITDB_ARGS="--locale-provider=icu --icu-locale=en-US"
初始化了 postgres:15-alpine 并尝试了您的示例 select 'a' > 'A'
和 select 'a' < 'A'
,它确实按预期工作! - GG.