Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error trying to migrate in postgres #120

Open
ashton opened this issue Dec 10, 2017 · 7 comments
Open

error trying to migrate in postgres #120

ashton opened this issue Dec 10, 2017 · 7 comments

Comments

@ashton
Copy link

ashton commented Dec 10, 2017

I'm trying to make a migration in postgres, I'm following the getting started and using the integreation with leiningen:

{:aliases {"migrate"  ["run" "-m" "investtrack.scripts.migration/migrate"]
            "rollback" ["run" "-m" "investtrack.scripts.migration/rollback"]}}
(ns investtrack.scripts.migration
  (:require [ragtime.jdbc :as jdbc]
            [ragtime.repl :as repl]))

(defn load-config []
  {:datastore  (jdbc/sql-database "jdbc:postgresql://postgres@localhost/investtrack")
   :migrations (jdbc/load-resources "migrations")})

(defn migrate []
  (repl/migrate (load-config)))

(defn rollback []
  (repl/rollback (load-config)))

Runing the command: $ lein migrate I get the following error:

Caused by: java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.Named
at clojure.core$name.invokeStatic(core.clj:1546)
at clojure.core$name.invoke(core.clj:1540)
at clojure.java.jdbc$as_sql_name.invokeStatic(jdbc.clj:67)
at clojure.java.jdbc$as_sql_name.invoke(jdbc.clj:56)
at clojure.java.jdbc$create_table_ddl$spec_to_string__449.invoke(jdbc.clj:1052)
at clojure.core$map$fn__4785.invoke(core.clj:2646)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.LazySeq.first(LazySeq.java:71)
at clojure.lang.RT.first(RT.java:667)
at clojure.core$first__4339.invokeStatic(core.clj:55)
at clojure.string$join.invokeStatic(string.clj:180)
at clojure.string$join.invoke(string.clj:180)
at clojure.java.jdbc$create_table_ddl.invokeStatic(jdbc.clj:1056)
at clojure.java.jdbc$create_table_ddl.doInvoke(jdbc.clj:1041)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at ragtime.jdbc$migrations_table_ddl.invokeStatic(jdbc.clj:15)
at ragtime.jdbc$migrations_table_ddl.invoke(jdbc.clj:14)
at ragtime.jdbc$ensure_migrations_table_exists.invokeStatic(jdbc.clj:43)
at ragtime.jdbc$ensure_migrations_table_exists.invoke(jdbc.clj:41)
at ragtime.jdbc.SqlDatabase.applied_migration_ids(jdbc.clj:62)
at ragtime.core$migrate_all.invokeStatic(core.clj:57)
at ragtime.core$migrate_all.invoke(core.clj:33)
at ragtime.repl$migrate.invokeStatic(repl.clj:32)
at ragtime.repl$migrate.invoke(repl.clj:17)
at investtrack.scripts.migration$migrate.invokeStatic(migration.clj:10)
at investtrack.scripts.migration$migrate.invoke(migration.clj:9)
at clojure.lang.Var.invoke(Var.java:375)
at user$eval5.invokeStatic(form-init4999925638129078061.clj:1)
at user$eval5.invoke(form-init4999925638129078061.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6917)
at clojure.lang.Compiler.load(Compiler.java:7379)

@weavejester
Copy link
Owner

Try changing your load-config function to:

(defn load-config []
  {:datastore  (jdbc/sql-database {:connection-uri "jdbc:postgresql://postgres@localhost/investtrack"})
   :migrations (jdbc/load-resources "migrations")})

@ashton
Copy link
Author

ashton commented Dec 21, 2017

changed to:

(defn load-config []
  {:datastore  (jdbc/sql-database {:connection-uri "jdbc:postgresql://localhost/investtrack?user=postgres"})
   :migrations (jdbc/load-resources "migrations")})

because the URI with user@host wasn't working, but I got the same error:

Exception in thread "main" java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.Named, compiling:(/private/var/folders/r7/0y3zp5r513v7_j7g1qshvyg00000gn/T/form-init8552361286008879301.clj:1:125)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$init_opt.invokeStatic(main.clj:277)
at clojure.main$init_opt.invoke(main.clj:277)
at clojure.main$initialize.invokeStatic(main.clj:308)
at clojure.main$null_opt.invokeStatic(main.clj:342)
at clojure.main$null_opt.invoke(main.clj:339)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to clojure.lang.Named
at clojure.core$name.invokeStatic(core.clj:1546)
at clojure.core$name.invoke(core.clj:1540)
at clojure.java.jdbc$as_sql_name.invokeStatic(jdbc.clj:67)
at clojure.java.jdbc$as_sql_name.invoke(jdbc.clj:56)
at clojure.java.jdbc$create_table_ddl$spec_to_string__449.invoke(jdbc.clj:1052)
at clojure.core$map$fn__4785.invoke(core.clj:2646)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.LazySeq.first(LazySeq.java:71)
at clojure.lang.RT.first(RT.java:667)
at clojure.core$first__4339.invokeStatic(core.clj:55)
at clojure.string$join.invokeStatic(string.clj:180)
at clojure.string$join.invoke(string.clj:180)
at clojure.java.jdbc$create_table_ddl.invokeStatic(jdbc.clj:1056)
at clojure.java.jdbc$create_table_ddl.doInvoke(jdbc.clj:1041)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at ragtime.jdbc$migrations_table_ddl.invokeStatic(jdbc.clj:15)
at ragtime.jdbc$migrations_table_ddl.invoke(jdbc.clj:14)
at ragtime.jdbc$ensure_migrations_table_exists.invokeStatic(jdbc.clj:43)
at ragtime.jdbc$ensure_migrations_table_exists.invoke(jdbc.clj:41)
at ragtime.jdbc.SqlDatabase.applied_migration_ids(jdbc.clj:62)
at ragtime.core$migrate_all.invokeStatic(core.clj:57)
at ragtime.core$migrate_all.invoke(core.clj:33)
at ragtime.repl$migrate.invokeStatic(repl.clj:32)
at ragtime.repl$migrate.invoke(repl.clj:17)
at investtrack.scripts.migration$migrate.invokeStatic(migration.clj:10)
at investtrack.scripts.migration$migrate.invoke(migration.clj:9)
at clojure.lang.Var.invoke(Var.java:375)
at user$eval5.invokeStatic(form-init8552361286008879301.clj:1)
at user$eval5.invoke(form-init8552361286008879301.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6917)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 14 more

@weavejester
Copy link
Owner

Could you run lein deps :tree on your repository? Perhaps there's a dependency issue.

If there's no problems with the dependencies, can you create a small project that replicates this error?

@ashton
Copy link
Author

ashton commented Dec 22, 2017

Here is the dependency tree:

Possibly confusing dependencies found:
[korma "0.4.0"] -> [org.clojure/java.jdbc "0.3.5"]
 overrides
[ragtime "0.7.2"] -> [ragtime/jdbc "0.7.2"] -> [org.clojure/java.jdbc "0.5.8"]

Consider using these exclusions:
[ragtime "0.7.2" :exclusions [org.clojure/java.jdbc]]

 [cider/cider-nrepl "0.14.0"]
   [org.tcrawley/dynapath "0.2.4" :exclusions [[org.clojure/clojure]]]
 [clj-time "0.14.0"]
   [joda-time "2.9.7"]
 [clojure-complete "0.2.4" :exclusions [[org.clojure/clojure]]]
 [compojure "1.5.1"]
   [clout "2.1.2"]
     [instaparse "1.4.0" :exclusions [[org.clojure/clojure]]]
   [medley "0.8.2"]
   [org.clojure/tools.macro "0.1.5"]
   [ring/ring-codec "1.0.1"]
     [commons-codec "1.6"]
   [ring/ring-core "1.5.0"]
     [commons-fileupload "1.3.1"]
     [commons-io "2.5"]
     [crypto-equality "1.0.0"]
     [crypto-random "1.2.0"]
     [org.clojure/tools.reader "0.9.1"]
 [http-kit "2.1.16"]
 [javax.servlet/servlet-api "2.5" :scope "test"]
 [korma "0.4.0"]
   [c3p0 "0.9.1.2"]
   [org.clojure/java.jdbc "0.3.5"]
 [org.clojure/clojure "1.8.0"]
 [org.clojure/tools.nrepl "0.2.13"]
 [org.postgresql/postgresql "9.2-1002-jdbc4"]
 [pjstadig/humane-test-output "0.8.3" :scope "test"]
 [ragtime "0.7.2"]
   [ragtime/core "0.7.2"]
   [ragtime/jdbc "0.7.2"]
     [resauce "0.1.0"]
 [ring/ring-defaults "0.2.1"]
   [ring/ring-anti-forgery "1.0.1"]
     [hiccup "1.0.5"]
   [ring/ring-headers "0.2.0"]
   [ring/ring-ssl "0.2.1"]
 [ring/ring-json "0.4.0"]
   [cheshire "5.5.0"]
     [com.fasterxml.jackson.core/jackson-core "2.5.3"]
     [com.fasterxml.jackson.dataformat/jackson-dataformat-cbor "2.5.3"]
     [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.5.3"]
     [tigris "0.1.1"]
 [ring/ring-mock "0.3.0" :scope "test"]

@weavejester
Copy link
Owner

There's a dependency warning:

Possibly confusing dependencies found:
[korma "0.4.0"] -> [org.clojure/java.jdbc "0.3.5"]
 overrides
[ragtime "0.7.2"] -> [ragtime/jdbc "0.7.2"] -> [org.clojure/java.jdbc "0.5.8"]

Korma is forcing an older version of java.jdbc to be used. Try adding in an explicit dependency to your project file:

[org.clojure/java.jdbc "0.5.8"]

@albertchan
Copy link

I'm also getting an error when trying to migrate with Postgres but the issue is different from Ashton's.

The error I'm getting with running lein migrate is:

Exception in thread "main" Syntax error compiling at (/private/var/folders/2c/1xhskbj17xb0gcx7j9kfxq740000gn/T/form-init5968680565182525726.clj:1:125).
	at clojure.lang.Compiler.load(Compiler.java:7647)
	at clojure.lang.Compiler.loadFile(Compiler.java:7573)
	at clojure.main$load_script.invokeStatic(main.clj:452)
	at clojure.main$init_opt.invokeStatic(main.clj:454)
	at clojure.main$init_opt.invoke(main.clj:454)
	at clojure.main$initialize.invokeStatic(main.clj:485)
	at clojure.main$null_opt.invokeStatic(main.clj:519)
	at clojure.main$null_opt.invoke(main.clj:516)
	at clojure.main$main.invokeStatic(main.clj:598)
	at clojure.main$main.doInvoke(main.clj:561)
	at clojure.lang.RestFn.applyTo(RestFn.java:137)
	at clojure.lang.Var.applyTo(Var.java:705)
	at clojure.main.main(main.java:37)
Caused by: org.postgresql.util.PSQLException: This ResultSet is closed.
	at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2852)
	at org.postgresql.jdbc2.AbstractJdbc2ResultSet.setFetchSize(AbstractJdbc2ResultSet.java:1875)
	at org.postgresql.jdbc4.Jdbc4Statement.createResultSet(Jdbc4Statement.java:37)
	at org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler.handleResultRows(AbstractJdbc2Statement.java:221)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1853)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:561)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:405)
	at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLUpdate(AbstractJdbc2Connection.java:382)
	at org.postgresql.jdbc2.AbstractJdbc2Connection.getTransactionIsolation(AbstractJdbc2Connection.java:904)
	at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:593)
	at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:574)
	at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:587)
	at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:574)
	at clojure.java.jdbc$db_do_execute_prepared_statement.invokeStatic(jdbc.clj:805)
	at clojure.java.jdbc$db_do_execute_prepared_statement.invoke(jdbc.clj:800)
	at clojure.java.jdbc$db_do_prepared.invokeStatic(jdbc.clj:844)
	at clojure.java.jdbc$db_do_prepared.invoke(jdbc.clj:817)
	at clojure.java.jdbc$execute_BANG_$execute_helper__556.invoke(jdbc.clj:959)
	at clojure.java.jdbc$execute_BANG_.invokeStatic(jdbc.clj:963)
	at clojure.java.jdbc$execute_BANG_.invoke(jdbc.clj:941)
	at clojure.java.jdbc$execute_BANG_.invokeStatic(jdbc.clj:952)
	at clojure.java.jdbc$execute_BANG_.invoke(jdbc.clj:941)
	at ragtime.jdbc$ensure_migrations_table_exists.invokeStatic(jdbc.clj:42)
	at ragtime.jdbc$ensure_migrations_table_exists.invoke(jdbc.clj:40)
	at ragtime.jdbc.SqlDatabase.applied_migration_ids(jdbc.clj:61)
	at ragtime.core$migrate_all.invokeStatic(core.clj:57)
	at ragtime.core$migrate_all.invoke(core.clj:33)
	at ragtime.repl$migrate.invokeStatic(repl.clj:32)
	at ragtime.repl$migrate.invoke(repl.clj:17)
	at scripts.migration$migrate.invokeStatic(migration.clj:18)
	at scripts.migration$migrate.invoke(migration.clj:17)
	at clojure.lang.Var.invoke(Var.java:380)
	at user$eval140.invokeStatic(form-init5968680565182525726.clj:1)
	at user$eval140.invoke(form-init5968680565182525726.clj:1)
	at clojure.lang.Compiler.eval(Compiler.java:7176)
	at clojure.lang.Compiler.eval(Compiler.java:7166)
	at clojure.lang.Compiler.load(Compiler.java:7635)
	... 12 more

My integration with Leiningen is also similar to Ashton's but my project.clj is:

(defproject clj-admin "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :min-lein-version "2.0.0"

  :dependencies 
  [[org.clojure/clojure "1.10.0"]
   [compojure "1.6.1"]
   [http-kit "2.3.0"]
   [postgresql "9.3-1102.jdbc41"]
   [ragtime "0.8.0"]
   [ring/ring-defaults "0.3.2"]]

  :plugins
  [[lein-ring "0.12.5"]]

  :ring {:handler clj-admin.handler/app}

  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring/ring-mock "0.3.2"]]}}

  :aliases {"migrate"  ["run" "-m" "scripts.migration/migrate"]
            "rollback" ["run" "-m" "scripts.migration/rollback"]})

And my deps tree is:

[clojure-complete "0.2.5" :exclusions [[org.clojure/clojure]]]
 [compojure "1.6.1"]
   [clout "2.2.1"]
     [instaparse "1.4.8" :exclusions [[org.clojure/clojure]]]
   [medley "1.0.0"]
   [org.clojure/tools.macro "0.1.5"]
   [ring/ring-codec "1.1.0"]
     [commons-codec "1.10"]
   [ring/ring-core "1.6.3"]
     [clj-time "0.11.0"]
       [joda-time "2.8.2"]
     [commons-fileupload "1.3.3"]
     [commons-io "2.5"]
     [crypto-equality "1.0.0"]
     [crypto-random "1.2.0"]
 [http-kit "2.3.0"]
 [javax.servlet/servlet-api "2.5" :scope "test"]
 [nrepl "0.6.0" :exclusions [[org.clojure/clojure]]]
 [org.clojure/clojure "1.10.0"]
   [org.clojure/core.specs.alpha "0.2.44"]
   [org.clojure/spec.alpha "0.2.176"]
 [postgresql "9.3-1102.jdbc41"]
 [ragtime "0.8.0"]
   [ragtime/core "0.8.0"]
   [ragtime/jdbc "0.8.0"]
     [org.clojure/java.jdbc "0.5.8"]
     [resauce "0.1.0"]
 [ring/ring-defaults "0.3.2"]
   [javax.servlet/javax.servlet-api "3.1.0"]
   [ring/ring-anti-forgery "1.3.0"]
     [hiccup "1.0.5"]
   [ring/ring-headers "0.3.0"]
   [ring/ring-ssl "0.3.0"]
 [ring/ring-mock "0.3.2" :scope "test"]
   [cheshire "5.8.0" :scope "test"]
     [com.fasterxml.jackson.core/jackson-core "2.9.0" :scope "test"]
     [com.fasterxml.jackson.dataformat/jackson-dataformat-cbor "2.9.0" :scope "test"]
     [com.fasterxml.jackson.dataformat/jackson-dataformat-smile "2.9.0" :scope "test"]
     [tigris "0.1.1" :scope "test"]

Any ideas? Thanks!

@leonardiwagner
Copy link

@albertchan I was having the same issue, changing [postgresql "9.3-1102.jdbc41"] for [org.postgresql/postgresql "42.2.5"] dependency solved that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants