Heroku Postgresql SET datestyle到欧洲

时间:2015-03-17 01:08:34

标签: ruby-on-rails postgresql heroku

我正在解决一个问题,我无法将数据复制到Rails中的postgresql,因为日期格式与默认的postgresql ISO MDY不匹配。

在我的本地机器上,我只是将日期样式更改为欧洲语,以便我的DMY数据正确匹配。

像往常一样,在Heroku生产服务器上执行此操作并不容易。使用下面的步骤,我尝试更改日期风格,但它不会持续存在(如退出,返回并询问postgres向我显示日期风格)。

任何想法如何坚持这一点。所有研究都表明不要这样做,并且要更改我的代码以将数据转换为MDY,但我从遗留系统中提取数百万行,默认为DMY并使用postgresql copy命令以尽可能最快的方式执行此操作。似乎更容易告诉Postgresql更改日期风格而不是修复其他所有内容:/

$ heroku pg:psql    
app-name::CRIMSON=> SET datestyle TO 'european';
SET
app-name::CRIMSON=> SHOW datestyle;
 DateStyle 
-----------
 ISO, DMY
(1 row)

app-name::CRIMSON-> \q
$ heroku pg:psql
---> Connecting to HEROKU_POSTGRESQL_CRIMSON_URL (DATABASE_URL)
psql (9.4.1, server 9.3.6)
SSL connection (protocol: TLSv1.2, cipher: jibberish, bits: 256, compression: off)
Type "help" for help.

app-name::CRIMSON=> SHOW datestyle;
 DateStyle 
-----------
 ISO, MDY
(1 row)

1 个答案:

答案 0 :(得分:2)

  

任何想法如何坚持这一点。

datestyle是一个服务器设置(在postgresql.conf中),客户端会话可以覆盖(使用set datestyle ...)单个事务或单个会话。有两种方法可以将更改保留在单个会话之外。

  • 更改postgresql.conf中的设置并重新启动服务器。 (在Heroku上不适合你。你肯定没有权限编辑postgresql.conf,对吗?)
  • ALTER DATABASE your_database_name SET datestyle TO 'ISO, european';(应该在Heroku上为你工作。我会把它设置为一个独立的迁移。)

FWIW,默认不是 ISO MDY ,它是 ISO,MDY 。 (两个值,用逗号分隔。)第一个是“输出格式规范”;第二个是“年/月/日订购的输入/输出规范”。 (见Client Connection Defaults