我正在尝试使用 postgresql 来启动我的 play20 应用程序,以便我可以使用并稍后部署到 Heroku。我关注了这个answer .
基本上,我建立了与数据库的连接(因此从本地应用程序到 Heroku postgresql 数据库的连接有效),但我无法使用生成的 1.sql evolution 来初始化数据库。但生成的 sql 无法工作,因为 postgresql 正在使用 schema (无论如何它应该在没有模式的情况下工作,但显然我做错了什么或者数据库做错了什么)。
create table user (
id bigint not null,
email varchar(255),
gender varchar(1),
constraint pk_user primary key (id));
结果
ERROR: syntax error at or near "user"
Position: 14 [ERROR:0, SQLSTATE:42601]
我通过向表名称添加架构来解决这个问题
create table public.user(
...
);
好吧,一切正常,直到我尝试读取或写入数据库。我再次遇到 sql 语法异常,无法使用数据库。看来 sql 查询有些错误。
有什么建议可能出现问题吗?
最佳答案
在使用其他数据库而不是生产环境开发应用程序时,这是非常常见的错误,但幸运的是也有常见的解决方案。您仍然可以使用 User
模型,但是您必须确保创建名称已更改的数据库表:
@Entity
@Table(name = "users")
public class User extends Model {
...
}
在大多数情况下,在您的 Controller 和模型中,名称切换对您来说是透明的。唯一需要记住开关的地方是 RawSql查询。
顺便说一句,在本地安装相同的数据库进行开发是个好主意,因为大多数流行的数据库之间存在很多差异,例如其他保留关键字,其他允许的类型,甚至其他 id 自动递增方法,因此查找并修复正确的值在本地主机上更容易。
关于sql - play20 ebean 生成的 sql 在 postgresql 上抛出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254804/