能否通过CREATE DATABASE可靠覆盖PostgreSQL的lc_monetary配置?
关于PostgreSQL中CREATE DATABASE时设置lc_monetary的问题
答案是可以实现,但不是直接通过CREATE DATABASE的内置选项,而是通过后续的数据库配置修改或者自定义模板库的方式,完全可以摆脱initdb初始配置的限制:
方法一:创建后立即修改数据库配置
lc_monetary是数据库级别的可配置参数,并非只能由initdb固化。你可以先创建数据库,再用ALTER DATABASE命令直接覆盖该参数:CREATE DATABASE my_app_db; ALTER DATABASE my_app_db SET lc_monetary TO 'zh_CN.UTF8'; -- 替换为你需要的本地化标识执行后,后续所有连接到该数据库的会话都会自动使用新的
lc_monetary设置,MONEY类型的精度控制、格式化规则以及运算逻辑都会遵循这个配置,和initdb的初始设置彻底无关。方法二:基于自定义模板库创建数据库
如果你需要批量创建同配置的数据库,可以先打造一个预设了lc_monetary的模板库,之后基于它创建新库:-- 创建自定义模板库(基于默认template1) CREATE DATABASE template_custom_money WITH TEMPLATE template1 ENCODING 'UTF8'; -- 给模板库设置目标lc_monetary ALTER DATABASE template_custom_money SET lc_monetary TO 'de_DE.UTF8'; -- 基于自定义模板创建新数据库 CREATE DATABASE shop_db WITH TEMPLATE template_custom_money;
需要注意的是:MONEY类型的底层存储是定点数值,修改lc_monetary不会改变已有数据的存储内容,只会影响数据的显示格式、新数据的精度约束以及运算时的规则。
内容的提问来源于stack exchange,提问作者rwallace
相关产品推荐
相关产品推荐

