Создать таблицу весной r2dbc

У меня есть соединение spring r2dbc для базы данных postgresql, и я хотел бы создать таблицу,

фактически эквивалент SQL

CREATE TABLE IF NOT EXISTS name (id, bigint);

как я могу это сделать, поскольку DatabaseClient, похоже, поддерживает только выбор/вставку?

databaseClient().execute().sql()?
Toerktumlare 25.06.2019 00:03

Примечание. Более новые версии будут принимать SQL напрямую через databaseClient.execute(…), см. github.com/spring-projects/spring-data-r2dbc/issues/89.

mp911de 28.06.2019 18:54
1
2
1 444
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам не нужно использовать DatabaseClient для создания таблиц. Поэтому, когда я столкнулся с той же проблемой, что и вы, я сделал что-то вроде следующего кода:

 fun postgresProcess(config: PostgresConfig): PostgresProcess {
        val runtime = PostgresStarter.getDefaultInstance()
        val exec = runtime.prepare(config)
        val postgres = exec.start()
        // connecting to a running Postgres and feeding up the database
        val conn = DriverManager.getConnection("jdbc:postgresql://$host:$port/$database", username, password)
        conn.createStatement().execute("CREATE TABLE customer ( id SERIAL PRIMARY KEY, firstname VARCHAR(100) NOT NULL, lastname VARCHAR(100) NOT NULL);")
        return postgres
    }

В начале вы можете сделать что-то подобное, а после этого вы сможете использовать клиент базы данных.

Я помню, как безуспешно пробовал пролетный путь. Я хотел бы использовать DatabaseClient. Больше кода в моем репозитории гитхаб

Ответ принят как подходящий

как сказал Томас Андольф в комментарии

.execute().sql() действительно правильный подход

в моем случае мне нужно было заблокировать результат на неопределенный срок, прежде чем продолжить, поэтому мне нужно было добавить .fetch().all().collectList().block();

Вы также можете вызвать execute(…).then() вместо выборки всех строк.

mp911de 28.06.2019 18:55

Другие вопросы по теме