Squeryl和PostgreSQL的自动增量

Jer*_*sen 1 postgresql squeryl

当我尝试使用Squeryl的Table.insert在PostgreSQL表中插入新记录时,它会触发此查询:

insert into "users" ("id", "email", "fullname") values (nextval('"s_users_id"'),?,?)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我没有定义序列,而是将id列定义为"autoincrement":

CREATE TABLE Users (
    id BIGSERIAL,
    email varchar(255) NOT NULL,
    fullname varchar(255),
    PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

我在另一个论坛上读到了一些关于这个问题的老帖子,我想知道现在的状态.我们不鼓励使用自动增量并定义序列吗?或者有一个简单的解决方法来使这个工作?

编辑:事实上我刚才看到自动增量本身创建了一个序列,但是在另一个名称下:users_id_seq有没有办法告诉Squeryl看这个名字,或者遵循PostgreSQL的约定?

mmm*_*ell 8

您可以声明序列的名称:

 case class Author(id: Long, firstName: String)             

 val author = table[Author]

 on(author)(s => declare(
    s.id is(autoIncremented("your_seq_name"))
 ))
Run Code Online (Sandbox Code Playgroud)

更多信息:http://squeryl.org/schema-definition.html


Dav*_*ker 5

目前还没有一种非常干净的方法,但是可以做到。只是子类PostgreSqlAdapter并重写:

def createSequenceName(fmd: FieldMetaData)