У меня есть соединение spring r2dbc для базы данных postgresql, и я хотел бы создать таблицу,
фактически эквивалент SQL
CREATE TABLE IF NOT EXISTS name (id, bigint);
как я могу это сделать, поскольку DatabaseClient, похоже, поддерживает только выбор/вставку?
Примечание. Более новые версии будут принимать SQL напрямую через databaseClient.execute(…), см. github.com/spring-projects/spring-data-r2dbc/issues/89.
Вам не нужно использовать 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() вместо выборки всех строк.
databaseClient().execute().sql()?