Skip to content

Instantly share code, notes, and snippets.

@bradlucas
Forked from dpick/copy
Last active September 15, 2016 20:08
Show Gist options
  • Save bradlucas/15784cdc88e3e6e2ca67c8549b418dc8 to your computer and use it in GitHub Desktop.
Save bradlucas/15784cdc88e3e6e2ca67c8549b418dc8 to your computer and use it in GitHub Desktop.
Clojure postgres copy table

Testing Meterstick with ax-meterstick-dev

(ns backfill-spike.core
(:require [byte-streams :as bs]
[clojure.java.jdbc :as jdbc]
[clojure.string :as string]
[clojure.java.io :as io]
[environ.core :refer [env]])
(import org.postgresql.copy.CopyManager)
(import org.postgresql.copy.PGCopyInputStream)
(import org.postgresql.util.PSQLException)
(import java.io.IOException)
(import [backfill_spike PGCopy])
(:gen-class))
(def db-spec
{:subprotocol "postgresql"
:subname (str "//" (env :db-host) ":" (env :db-port) "/" (env :db-name))
:user (env :db-user)
:password (env :db-password)})
(def conn (jdbc/get-connection db-spec))
(defn copy-table [table-name]
(let [is (PGCopyInputStream. conn (str "COPY " table-name " TO STDOUT (DELIMITER '|')"))
br (java.io.BufferedReader. (java.io.InputStreamReader. is))]
(doall
(doseq [row (line-seq br)]
(prn row)))))
(defn -main [& args]
(copy-table "foo"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment