Heroku 上的 PSQLException

Posted

技术标签:

【中文标题】Heroku 上的 PSQLException【英文标题】:PSQLException on heroku 【发布时间】:2017-12-08 21:25:24 【问题描述】:

我使用 java、apache-cayenne 和 postgreSQL。

我的应用在桌面上运行良好,但在 Heroku 上运行时出现错误:

org.postgresql.util.PSQLException: Bad value for type timestamp/date/time: 
1

还有警告:

INFO org.apache.cayenne.log.JdbcEventLogger - --- transaction started.
WARN org.apache.cayenne.access.types.SerializableTypeFactory - Haven't found suitable ExtendedType for class 'java.time.LocalDate'. Most likely you need to define a custom ExtendedType.
WARN org.apache.cayenne.access.types.SerializableTypeFactory - SerializableType will be used for type conversion.
INFO org.apache.cayenne.log.JdbcEventLogger - --- transaction started.
INFO org.apache.cayenne.log.JdbcEventLogger - SELECT t0.DATE, t0.ROOM, t0.TIME, t0.TYPE, t0.PROFESSOR_ID, t0.SUBJECT_ID, t0.LESSON_ID FROM Lesson t0 JOIN Subject t1 ON (t0.SUBJECT_ID = t1.SUBJECT_ID) WHERE (t0.DATE = ?) AND (t1.USER_ID = ?) [bind: 1->DATE:2017-12-08, 2->USER_ID:81627965]

这是我的 xml:

<db-entity name="Lesson">
    <db-attribute name="DATE" type="DATE"/>
    <db-attribute name="LESSON_ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
    <db-attribute name="PROFESSOR_ID" type="INTEGER"/>
    <db-attribute name="ROOM" type="VARCHAR" length="50"/>
    <db-attribute name="SUBJECT_ID" type="INTEGER"/>
    <db-attribute name="TIME" type="TIME"/>
    <db-attribute name="TYPE" type="INTEGER"/>
</db-entity>
<obj-entity name="Lesson" className="com.intetics.organizerbot.entities.Lesson" dbEntityName="Lesson">
    <obj-attribute name="date" type="java.time.LocalDate" db-attribute-path="DATE"/>
    <obj-attribute name="room" type="java.lang.String" db-attribute-path="ROOM"/>
    <obj-attribute name="time" type="java.time.LocalTime" db-attribute-path="TIME"/>
    <obj-attribute name="type" type="int" db-attribute-path="TYPE"/>
</obj-entity>

我在桌面和 Heroku 中使用同一个 Heroku Postgres 数据库。

似乎有一些与 LocalDate 类有关的问题。但是我不知道为什么在我的电脑上一切正常,而在 heroku 上却有问题。

我也尝试过部署 jar,效果很好,但还是不行。

您对为什么会发生这种情况以及如何解决它有任何想法吗?

关于生产服务器Bad value for type timestamp on production server 的类似问题 但我似乎无法在 Heroku 上应用它的答案。

【问题讨论】:

我敢打赌这也是驱动程序版本问题。 您对 apache-cayenne 使用的依赖项和版本是什么? 我使用的是 cayenne-server 和 cayenne-java8。两个版本 4.0.M5 您的路径上似乎可能有多个版本的 cayenne 或 jdbc 驱动程序。 【参考方案1】:

为了使用 Cayenne 的 Java 8 java.time.* 类,您需要确保将 cayenne-java8 模块包含到您的项目中,有关详细信息,请参阅此 docs。没有它,Cayenne 就不知道如何处理这些类。

【讨论】:

以上是关于Heroku 上的 PSQLException的主要内容,如果未能解决你的问题,请参考以下文章

加快 Heroku 上的部署 [重复]

Heroku 上的 PSQLException

Heroku 上的 CodeIgniter 返回 404

Heroku 上的 Phoenix:错误 R10

Heroku 上的 Symfony:403 Forbidden 您无权访问此服务器上的 /

Heroku 上的 nodemon 启动错误