Мой gradle.build (с использованием плагина nu.studer.jooq)
jooq {
MyProject(sourceSets.main) {
generator {
database {
name = 'org.jooq.meta.extensions.ddl.DDLDatabase'
properties {
property {
key = 'scripts'
value = 'src/main/resources/database.sql'
}
}
inputSchema = ''
outputSchema = 'something'
// schemata {
// schema {
// inputSchema = "" // I've tried this too
// outputSchema = 'something'
// }
// }
forcedTypes {
forcedType {
name = 'varchar'
expression = '.*'
types = 'JSONB?'
}
forcedType {
name = 'varchar'
expression = '.*'
types = 'INET'
}
}
}
generate {
relations = true
springAnnotations = true
deprecated = false
fluentSetters = true
// ...
}
target {
packageName = 'com.springforum'
}
}
}
}
В процессе сборки он может отлично сгенерировать схему, но он продолжает использовать схему PUBLIC
для вывода, хотя я установил outputSchema (я пробовал использовать пустую строку и непустую строку)
Обновление: проблема возникает только в том случае, если inputSchema
пуст, я пробовал использовать другой скрипт sql со схемой, и он работает по назначению
потому что мой файл sql не использует схему (которая генерируется из pg_dump и не имеет параметров для ее изменения), например: CREATE TABLE table_name () ;. Я решил проблему, добавив схему вручную, но надеюсь, что есть способ позволить мне это сделать.
Понятно, у меня плохо. Я упустил из виду, что вы используете DDLDatabase
Это известная проблема, которая возникает из-за того, что за кулисами DDLDatabase
использует базу данных H2 в памяти для имитации выполнения вашего сценария SQL, а затем выполняет обратное проектирование этой базы данных H2. По умолчанию в H2 (и некоторых других базах данных) все идет в схеме PUBLIC
. Проблема здесь: # 7650
В настоящее время (начиная с jOOQ 3.11) я предлагаю вам либо явно указать схему в вашем DDL-скрипте, либо использовать inputSchema = "PUBLIC"
, зная вышеизложенное.
В jOOQ 3.12 это было исправлено с помощью # 7759. Можно будет указать поведение неквалифицированных объектов схемы:
<!-- The default schema for unqualified objects:
- public: all unqualified objects are located in the PUBLIC (upper case) schema
- none: all unqualified objects are located in the default schema (default)
This configuration can be overridden with the schema mapping feature -->
<property>
<key>unqualifiedSchema</key>
<value>none</value>
</property>
Спасибо за ответ, я попробовал еще раз с inputSchema = "PUBLIC"
, и проблема устранилась. Еще не пробовал решение Jooq 3.12.
Почему вы оставляете
inputSchema
пустым? Это не разрешено. Но чего вы хотите этим добиться?