Sql 使用动态值重命名cockroachdb中的表

Sql 使用动态值重命名cockroachdb中的表,sql,cockroachdb,Sql,Cockroachdb,在cockroachdb中,我试图用动态值重命名一个表 当前表名:bla 需要表格名称:bla_currentDay 我试着这样做: ALTER TABLE bla RENAME TO (SELECT concat('bla',extract('day', CURRENT_DATE)::STRING)); 但我犯了个错误 invalid syntax: statement ignored: syntax error at or near "(" DETAIL: source SQL: ALTE

在cockroachdb中,我试图用动态值重命名一个表

当前表名:bla

需要表格名称:bla_currentDay

我试着这样做:

ALTER TABLE bla RENAME TO (SELECT concat('bla',extract('day', CURRENT_DATE)::STRING));
但我犯了个错误

invalid syntax: statement ignored: syntax error at or near "("
DETAIL: source SQL:
ALTER TABLE bla RENAME TO (SELECT concat('bla',extract('day', CURRENT_DATE)::STRING))
                          ^
HINT: try \h ALTER TABLE

SQL真的可以做到这一点吗?

目前,这似乎是不受支持的。根据对动态sql特性支持问题的回答

…CockroachDB支持SQL,期望它将由用其他编程语言编写的外部应用程序驱动,并且您可以在外部程序中任意构造动态SQL。我们还没有像PL/SQL这样的完整的数据库编程语言

…这意味着您需要遵守文档中指定的标识符的语法和类型约束

如果在外部将表重命名为,则可以通过-execute标志传入整个命令。您可以使用相同的方法来运行和检索初始查询。例如

newNameQuery=选择concat'bla',提取'day',CURRENT_DATE::STRING; 尾部从标量中剥离头部,否则awk/grep将解析输出 newName=`echo$newNameQuery |蟑螂sql-certs dir=$certsDir-host=$host1 | tail-1` renameQuery=将表格bla重命名为$newName; echo$renameQuery |蟑螂sql-certs dir=$certsDir-host=$host1 …如果你喜欢一个快速的“肮脏的聚会”的例子

但是,如果您真的想在IntegrateShell会话中完成这一切。。。一个对立的解读将揭示出&公用事业这些允许您将字符串传递回客户端,以便在初始shell中执行,并有选择地将结果传递回sql shell

您可以在sql客户机中将一个长的总字符串串在一起,并根据需要使用这些标志来来回切换,直到一个ALTER TABLE。。。找到了蟑螂数据库服务器可以有效解释的字符串。如果我有足够的学究气来说明在你的案例中可能会是什么样子,我可能会提供一个如下的例子

[1028 16:19:36+0000~]$cockroach sql-certs dir=$certs_dir-host=$host_1 欢迎使用蟑螂SQL接口。 所有语句都必须以分号结尾。 要退出:CTRL+D。 服务器版本:CockroachDB CCL v19.1.4 x86_64-unknown-linux-gnu,构建于2019/08/06 15:34:13,go1.11.6与客户端版本相同 集群ID:deadbeef dead beef dead beef dead beef 输入\?简单介绍一下。 root@host1:26257/defaultdb>创建表格bla i int; 创建表 时间:38.562ms root@host1:26257/defaultdb>\\\124; name=`cockroach sql-certs dir=$certs\u dir-host=$host\u 1-执行选择concat'bla',提取'day',当前日期::STRING;|tail-1`&&echo将表bla重命名为$name; 重命名表 时间:75.371ms …其中$CERTS_DIR和$HOST_1是我笔记本电脑上的环境变量