В настоящее время похоже, что это не поддерживается. Согласно этот комментарий отвечает на вопрос о функции динамического SQL поддерживать
...CockreachDB поддерживает SQL, ожидая, что он будет управляться внешним приложением, написанным на каком-то другом языке программирования (и вы можете создать динамический SQL, как вам нравится, в вашей внешней программе). У нас (пока) нет полноценного языка программирования для базы данных, такого как PL/SQL.
... подразумевая, что вам необходимо соблюдать синтаксис и ограничения типа для name
идентификатор, указанный в документах RENAME TABLE
.
Если вы создаете свою таблицу, переименуйте ее извне в оболочка sql, вы можете передать всю команду с помощью флага --execute
. Вы можете использовать тот же метод для запуска и получения исходного запроса. Например...
newNameQuery="SELECT concat('bla',extract('day', CURRENT_DATE)::STRING);"
# tail to strip header from scalar, otherwise awk/grep to parse output
newName=`echo $newNameQuery | cockroach sql --certs-dir=$certsDir --host=$host1 | tail -1`
renameQuery="ALTER TABLE bla RENAME TO $newName;"
echo $renameQuery | cockroach sql --certs-dir=$certsDir --host=$host1
... если вам нравится пример быстрого и грязного удара.
Однако, если вы действительно хотите сделать все это в сеансе интегрированной оболочки ... состязательное чтение документация клиента покажет утилиты \!
и \|
. Это позволяет вам передавать строки обратно вашему клиенту для выполнения в исходной оболочке и при необходимости передавать результаты обратно в оболочку sql.
Вы можете объединить длинную общую строку в клиенте sql и использовать эти флаги для жонглирования вперед и назад по мере необходимости, пока не будет найдена строка ALTER TABLE...
, которую сервер CockroachDB сможет корректно интерпретировать. Если бы я был достаточно педантичен, чтобы указать, как это может выглядеть в вашем случае, я мог бы привести пример, подобный следующему...
[1028 16:19:36+0000 ~]$ cockroach sql --certs-dir=$CERTS_DIR --host=$HOST_1
# Welcome to the cockroach SQL interface.
# All statements must be terminated by a semicolon.
# To exit: CTRL + D.
#
# Server version: CockroachDB CCL v19.1.4 (x86_64-unknown-linux-gnu, built 2019/08/06 15:34:13, go1.11.6) (same version as client)
# Cluster ID: deadbeef-dead-beef-dead-beefdeadbeef
#
# Enter \? for a brief introduction.
#
root@host1:26257/defaultdb> create table bla (i int);
CREATE TABLE
Time: 38.562ms
root@host1:26257/defaultdb> \| name=`cockroach sql --certs-dir=$CERTS_DIR --host=$HOST_1 --execute "SELECT concat('bla',extract('day', CURRENT_DATE)::STRING);" | tail -1` && echo "ALTER TABLE bla RENAME to $name ;"
RENAME TABLE
Time: 75.371ms
...где $CERTS_DIR
и $HOST_1
— переменные среды на моем ноутбуке.
person
Peter Vandivier
schedule
28.10.2019