我遇到过一个奇怪的SQL查询,比如
ALTER TABLE some_db.some_table ADD COLUMN metadata_labels varchar(255) DEFAULT FALSE;
我预计它会失败,因为我要为varchar列添加一个布尔缺省值.但至少在Postgres,它得到了成功的执行,我看到了以下几点:
varchar
在我看来像是某种奇怪的胁迫
为什么此查询没有因为类型不匹配而失败?
存在从boolean到text的赋值强制转换,因此如果存在对目标数据类型的赋值强制转换,则DEFAULT值必须是可接受的.
boolean
text
DEFAULT
查看pg_attrdef目录中的adbin列,我可以看到存储的实际默认表达式是
pg_attrdef
adbin
"varchar"(text(FALSE), 259, FALSE)
其中,外部函数是到varchar(255)的转换.
varchar(255)
React实战进阶45讲 -〔王沛〕
白话法律42讲 -〔周甲徳〕
趣谈Linux操作系统 -〔刘超〕
现代C++编程实战 -〔吴咏炜〕
摄影入门课 -〔小麥〕
容器实战高手课 -〔李程远〕
恋爱必修课 -〔李一帆〕
Spark性能调优实战 -〔吴磊〕
如何落地业务建模 -〔徐昊〕
说透低代码 -〔陈旭〕
超级访谈:对话汤峥嵘 -〔汤峥嵘〕
深入浅出可观测性 -〔翁一磊〕
无涯教程 - Python2教程
无涯教程 - C语言教程
无涯教程 - Sed教程
无涯教程 - Tcl/Tk教程
无涯教程 - Java 泛型教程
无涯教程 - SQL教程
无涯教程 - ExpressJS教程
无涯教程 - Latex教程