そのため、PostgreSQL (またはその他のベンダー) の予約語を使用していないことを確認した単純なドメイン クラスがいくつかあります。実行grails schema-export
すると、同じデータベースに対して実行すると正常に実行され、問題なくすべてのテーブルが作成される ddl が生成されます。
ただし、grails アプリケーションを実行すると、エラーが発生しますERROR: relation "artist" does not exist
。(アーティストは、BootStrap.groovy でサンプルを作成しようとしているドメインです)。
データベースを見ると、ドメイン用に作成されたテーブルはありません。
のすべてのロギングを有効にしましorg.hibernate
たが、問題を示すものは何もありません。私が見ることができる唯一の問題は、テーブルの作成に関連するログがなく、単純な選択のサンプルクエリのように見えるものだけであることです.
ここに私の DataSource.groovy があります:
dataSource {
pooled = true
driverClassName = "org.postgresql.Driver"
dialect = "org.hibernate.dialect.PostgreSQLDialect"
username = "my_username"
password = "my_password"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbcreate = "create-drop"
url = "jdbc:postgresql://localhost:5432/dev"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/test"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/prod"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}
資格情報 (上記の偽物) が有効であること、ユーザーに権限があること、データベースが指定された場所で実行されていることなどを確認しました。
不足しているものはありますか、またはエラーの内容を表示したり、エラーを見つけるのに役立つ可能性のある他の種類のログを有効にすることはできますか?
最も興味深いのは、によって生成された ddl が正常にschema-export
実行されることです。grails は実行時に異なる方法で SQL を生成しますか?それとも、grails が create ステートメントを実行しない原因となるものはありますか?
Grails バージョン 2.1.1、PostgreSQL 9.2.1
要求に応じた BootStrap:
import my.site.domain.artist.*
class BootStrap {
def init = { servletContext ->
System.out.println("\n")
log.info("---------------------------------------------------")
log.info("BootStrap initializing...")
log.info("---------------------------------------------------")
TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
log.info("Default TimeZone set to " + TimeZone.getDefault().displayName)
Artist artist = new Artist(artistName: 'Artist Name', shortBio: "Short Bio", biography: "Bio", url: "/some_artist")
artist.save()
if(artist.hasErrors()) {
log.info(artist.errors)
} else {
log.info("--Artist--")
log.info("dateCreated: " + artist.dateCreated)
log.info("lastUpdated: " + artist.lastUpdated)
log.info("mediumImageURL: " + artist.mediumImageURL)
}
}
def destroy = {
}
}