diff --git a/clojure/src/pgloader/ddl/common.clj b/clojure/src/pgloader/ddl/common.clj index 311c1dd7..5ba75333 100644 --- a/clojure/src/pgloader/ddl/common.clj +++ b/clojure/src/pgloader/ddl/common.clj @@ -32,7 +32,9 @@ (= lower "xml") "xml" ;; Pass-through array types from PostgreSQL sources (#1371) (str/ends-with? lower "[]") lower - (str/starts-with? upper "BIGSERIAL") "bigserial" + (str/starts-with? upper "BIGSERIAL") "bigserial" + (str/starts-with? upper "SMALLSERIAL") "smallserial" + (str/starts-with? upper "SERIAL") "serial" ;; Unsigned integers: upcast to avoid overflow (matches CL cast rules) (and unsigned? (str/starts-with? upper "TINYINT")) "smallint" (and unsigned? (str/starts-with? upper "SMALLINT")) "integer" diff --git a/clojure/src/pgloader/source/mssql.clj b/clojure/src/pgloader/source/mssql.clj index 57aea43b..87661007 100644 --- a/clojure/src/pgloader/source/mssql.clj +++ b/clojure/src/pgloader/source/mssql.clj @@ -184,7 +184,9 @@ is-identity (= 1 (:is_identity c)) is-pk (some #(= (:column_name c) %) (mapv :column_name pkeys)) ai (and is-identity is-pk)] - (let [pg-type (if ai "bigserial" (mssql-type->pg col-type)) + (let [pg-type (if ai + (if (= col-type "bigint") "bigserial" "serial") + (mssql-type->pg col-type)) raw-def (when-not ai (:column_default c))] {:column-name (:column_name c) :column-type pg-type diff --git a/src/sources/mssql/mssql-cast-rules.lisp b/src/sources/mssql/mssql-cast-rules.lisp index d94ff64b..ee38a73a 100644 --- a/src/sources/mssql/mssql-cast-rules.lisp +++ b/src/sources/mssql/mssql-cast-rules.lisp @@ -13,7 +13,7 @@ (:source (:type "xml") :target (:type "xml" :drop-typemod t)) (:source (:type "int" :auto-increment t) - :target (:type "bigserial" :drop-default t)) + :target (:type "serial" :drop-default t)) (:source (:type "bigint" :auto-increment t) :target (:type "bigserial"))