Grails с PostgreSQL не генерирует таблицы

Итак, у меня есть несколько простых доменных классов, которые, как я убедился, не используют никаких зарезервированных слов 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 = {
    }
}

person kz3    schedule 19.10.2012    source источник
comment
Я не вижу очевидных проблем в вашей конфигурации, она более-менее такая же, как у меня. Но я не эксперт. Я использую postgresql для производства и H2 для разработки. Вообще никаких проблем. Если вы используете H2 для среды разработки, тогда он будет работать?   -  person Henrik    schedule 19.10.2012
comment
Покажите нам свой код начальной загрузки, пожалуйста   -  person nickdos    schedule 19.10.2012
comment
Используя H2, я думаю, что все было хорошо, но сложно сказать, потому что у меня никогда ничего не было в BootStrap, и я никогда не проверял таблицы. Вполне уверен, что я создал домен через контроллер, и он в обязательном порядке сохранился. Я проверю H2 еще раз позже, когда у меня будет еще немного времени. BootStrap добавлен выше.   -  person kz3    schedule 19.10.2012
comment
Попробуйте добавить logSql = true в конфигурацию вашего разработчика и посмотрите, пытается ли он хотя бы сгенерировать операторы.   -  person James Kleeh    schedule 19.10.2012
comment
Похоже, это приводит к тому же ведению журнала, что и org.hibernate, который не показывает никакого SQL-запроса create. Единственный результат, который он действительно производит, - это конфигурация БД и простые операции CRUD (которые, как я полагаю, он сохраняет для дальнейшего использования). К сожалению, ничего, что могло бы вызвать тревогу.   -  person kz3    schedule 19.10.2012
comment
Хорошо, только что подтвердил, что приложение работает нормально с H2, так что это проблема PostgreSQL, с которой я столкнулся.   -  person kz3    schedule 19.10.2012


Ответы (1)


Это может быть идиосинкразия pgsql и gorm, поскольку она относится к автоматически сгенерированным последовательностям для идентификаторов, а также к тому, что id является зарезервированным словом в pgsql. Убедитесь, что в объектах вашего домена вы используете что-то вроде user_id (с соответствующим синтаксисом таблицы), а не id.

person Mi Sha    schedule 25.10.2012