Closed Symbolics closed 6 years ago
I would like to propose the following as a s-sql macro for copy. Note that copy in Postgres changed in version 10, but the version 9 syntax is still supported. This macro is version 9 so that it can be used with both Greenplum and Postgres.
;;; https://www.postgresql.org/docs/current/static/sql-copy.html
(def-sql-op :copy (table &rest args) "Move data between Postgres tables and filesystem files." (split-on-keywords ((columns ? *) (from ?) (to ?) (on-segment ?) (binary ?) (oids ?) (header ?) (delimiter ?) (null ?) (escape ?) (newline ?) (csv ?) (quote ?) (force-not-null ? *) (fill-missing-fields ?) (log-errors ?) (segment-reject-limit ? *)) args `("COPY " ,@(sql-expand table) " " ,@(when columns `("(" ,@(sql-expand-list columns) ") ")) ,@(when from `("FROM " ,@(sql-expand (car from)) " ")) ,@(when to `("TO " ,@(sql-expand (car from)) " ")) ,@(when on-segment `("ON SEGMENT ")) ,@(when binary `("BINARY ")) ,@(when oids `("OIDS ")) ,@(when header `("HEADER ")) ,@(when delimiter `("DELIMITER " ,@(sql-expand (car delimiter)) " ")) ,@(when null `("NULL " ,@(sql-expand (car null)) " ")) ,@(when escape `("ESCAPE " ,@(sql-expand (car escape)) " ")) ,@(when newline `("NEWLINE " ,@(sql-expand (car newline)) " ")) ,@(when csv `("CSV ")) ,@(when quote `("QUOTE " ,@(sql-expand (car quote)))) ,@(when force-not-null `("FORCE NOT NULL " ,@(sql-expand-list force-not-null) " ")) ,@(when fill-missing-fields `("FILL MISSING FIELDS ")) ,@(when log-errors `("LOG ERRORS ")) ,@(when segment-reject-limit `("SEGMENT REJECT LIMIT " ,@(sql-expand (car segment-reject-limit)) " " ,@(if (second segment-reject-limit) `(,@(sql-expand (second segment-reject-limit)))))))))
Pull request #136 implements this macro.
Merged
I would like to propose the following as a s-sql macro for copy. Note that copy in Postgres changed in version 10, but the version 9 syntax is still supported. This macro is version 9 so that it can be used with both Greenplum and Postgres.
;;; https://www.postgresql.org/docs/current/static/sql-copy.html