title: Using Auto Incrementing fields with PostgreSQL and Slick
body: <p>How does one insert records into PostgreSQL using AutoInc keys with Slick mapped tables? If I use and Option for the id in my case class and set it to None, then PostgreSQL will complain on insert that the field cannot be null. This works for H2, but not for PostgreSQL:</p>
  
  <pre><code>//import scala.slick.driver.H2Driver.simple._
  //import scala.slick.driver.BasicProfile.SimpleQL.Table
  import scala.slick.driver.PostgresDriver.simple._
  import Database.threadLocalSession
  
  object TestMappedTable extends App{
  
      case class User(id: Option[Int], first: String, last: String)
  
      object Users extends Table[User]("users") {
          def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
          def first = column[String]("first")
          def last = column[String]("last")
          def * = id.? ~ first ~ last &lt;&gt; (User, User.unapply _)
          def ins1 = first ~ last returning id
          val findByID = createFinderBy(_.id)
          def autoInc = id.? ~ first ~ last &lt;&gt; (User, User.unapply _) returning id
      }
  
   // implicit val session = Database.forURL("jdbc:h2:mem:test1", driver = "org.h2.Driver").createSession()
      implicit val session = Database.forURL("jdbc:postgresql:test:slicktest",
                             driver="org.postgresql.Driver",
                             user="postgres",
                             password="xxx")
  
    session.withTransaction{
      Users.ddl.create
  
      // insert data
      print(Users.insert(User(None, "Jack", "Green" )))
      print(Users.insert(User(None, "Joe", "Blue" )))
      print(Users.insert(User(None, "John", "Purple" )))
      val u = Users.insert(User(None, "Jim", "Yellow" ))
    //  println(u.id.get)
      print(Users.autoInc.insert(User(None, "Johnathan", "Seagul" )))
    }
    session.withTransaction{
      val queryUsers = for {
      user &lt;- Users
    } yield (user.id, user.first)
    println(queryUsers.list)
  
    Users.where(_.id between(1, 2)).foreach(println)
    println("ID 3 -&gt; " + Users.findByID.first(3))
    }
  }
  </code></pre>
  
  <p>Using the above with H2 succeeds, but if I comment it out and change to PostgreSQL, then I get:</p>
  
  <pre><code>[error] (run-main) org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint
  org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint
  </code></pre>