我在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項目提交一個錯誤。