【问题标题】:Redshift VACUUM cannot run inside a transaction block on SQLWorkbenchJRedshift VACUUM 无法在 SQLWorkbenchJ 上的事务块内运行
【发布时间】:2015-11-30 08:33:38
【问题描述】:

我有一个:

VACUUM 不能在事务块内运行

Redshift 中的 SQLWorkbenchJ 出错,但在此之前我已经提交了所有事务。

【问题讨论】:

  • 在连接窗口开启'Autocommit'后,'vacuum'就可以正常运行了。

标签: vacuum sql-workbench-j


【解决方案1】:

您无需更改连接配置文件,您可以使用set autocommit“即时”更改 SQL 脚本中的自动提交属性

set autocommit on;
vacuum;
set autocommit off;

您也可以通过菜单“SQL -> Autocommit”切换当前的自动提交状态

【讨论】:

  • 嗨,我在 SQLWorkBenchJ 中运行这 3 个 sql 命令时收到一条错误消息:错误:在“on”位置或附近出现语法错误:17
  • @TingJia:为我工作。也许您使用的是旧版本的 SQL Workbench。
  • 假设我没有进行任何类型的事务&我只想通过 Redshift JDBC 执行 VACCUM & ANALYZE,这可能吗??
  • @Akki:正如我所说:开启自动提交
  • '设置自动提交;'是无效的语法,至少在红移上。而是在一行中使用:“commit; Vacuum;commit;”
【解决方案2】:

对我来说这很有效。

END TRANSACTION;
VACCUM <TABLENAME>;

【讨论】:

  • 也为我工作
【解决方案3】:

打开和关闭自动提交似乎是一个 hacky 解决方案,特别是如果您有一个带有提交和清理的长脚本(即许多非常大的临时表)。相反,尝试(在一行中)。此外,许多人报告 redshift 不喜欢这种语法。相反,

COMMIT;VACUUM;COMMIT;

问题在于,vacuum 不仅希望成为事务块中的第一个命令,还希望该块在之后显式提交。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2013-10-09
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多