How to read/write Timestamp in Doobie (Postgres) How to read/write Timestamp in Doobie (Postgres) postgresql postgresql

How to read/write Timestamp in Doobie (Postgres)


You need to import doobie.implicits.javasql._ and doobie.implicits.javatime._ release notes. Here is a full app example reading/writing timestamp with doobie.

// sbt// "org.tpolecat" %% "doobie-core"      % "0.8.8",// "org.tpolecat" %% "doobie-postgres"  % "0.8.8"import java.sql.Timestampimport java.time.LocalDateTimeimport doobie._import doobie.implicits._import doobie.implicits.javasql._import doobie.postgres._import doobie.postgres.implicits._import doobie.postgres.pgisimplicits._import cats._import cats.implicits._import cats.effect._import cats.effect.implicits._case class ExampleRecord(data: String, created_at: Timestamp)object Example extends IOApp {  override def run(args: List[String]): IO[ExitCode] = {    val xa = Transactor.fromDriverManager[IO](      "org.postgresql.Driver",     // driver classname      "jdbc:postgresql:example_db",     // connect URL (driver-specific)      "postgres",                  // user      ""                          // password    )    val drop = sql"drop table if exists example_ts".update.run    val create =      sql"create table if not exists example_ts (data TEXT NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP)".update.run    val insert = Update[ExampleRecord]("insert into example_ts (data, created_at) values (?, ?)")      .updateMany(List(        ExampleRecord("one", Timestamp.valueOf(LocalDateTime.now())),        ExampleRecord("two", Timestamp.valueOf(LocalDateTime.now()))      ))    val setup = for {      _ <- drop.transact(xa)      _ <- create.transact(xa)      _ <- insert.transact(xa)    } yield ()    val select =      sql"select data, created_at from example_ts".query[ExampleRecord].stream.transact(xa)    val output = select.evalTap { record =>      IO(println(record))    }.compile.drain    for {      _ <- setup      _ <- output    } yield ExitCode.Success  }}