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 }}