我在Rails项目中有一个默认表达式的遗留表。该表达式会随机选取一个四位数字并将其转换为字符串。在我的测试中,我一直在打字这个确切的语句转换成PSQL设置默认表情:当我做\d owners
这为什么Postgres在为列设置默认函数时双引用第一个函数标识符?
alter table owners alter column signing_code set default
substring(to_char(((random() * ((10000 - 1))::double precision) +
(1)::double precision), '0000'::text), '....$'::text);
那么,什么是Postgres的决定是我实际的默认表情:
default "substring"(to_char(((random() * ((10000 - 1))::double
precision) + (1)::double precision), '0000'::text), '....$'::text)
公告围绕第一个函数标识符substring
的双引号。这会导致两个问题的Rails架构转储/负载:
- 当倾倒架构DB/schema.rb,无效红宝石产生,因为双引号没有逃过
- 即使你正确地逃脱报价当将模式加载回数据库时,Rails错误地将整个表达式设置为默认的字符串值,而不是表达式(即它用单引号括起表达式)
有没有办法让Postgres不是在我的情况下双引号嵌套函数调用中的第一个函数?这将是一个很好的解决方法,否则我会向Rails项目提交一个错误。