You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift创建的表无法持久化,断开重连后消失,求解决方法

解决Redshift创建表无法持久化的问题

这个问题我之前排查过好几次,大概率是事务未提交或者连接配置的问题,给你几个具体的解决步骤:

1. 先检查SqlWorkbenchJ的自动提交设置(最常见原因)

SqlWorkbenchJ默认可能没开自动提交,这时候你执行的CREATE TABLE操作其实在一个未提交的事务里——只有当前连接能看到这个临时的表状态,一旦断开连接,事务直接回滚,表就没了。

解决起来很简单:

  • 执行完建表语句后,手动点击工具栏的Commit按钮(或者按Ctrl+Enter快捷键)提交事务;
  • 一劳永逸的方法是开启自动提交:点击顶部菜单栏的SQL -> Auto-commit,确保这个选项被勾选,这样每次执行SQL后都会自动提交,不用手动操作。

2. 确认建表语句没隐含临时表属性

Redshift里的临时表(TEMP/TEMPORARY关键字)或者会话级表是会随连接断开自动删除的。你的原语句看起来没问题,但可以显式加上PERMANENT关键字强制创建持久化表,避免意外:

CREATE TABLE mydb_dev.Widget (
    fizz BIGINT,
    buzz BIGINT,
    lastRanOn timestamp with time zone NOT NULL DEFAULT (current_timestamp AT TIME ZONE 'UTC')
) PERMANENT;

3. 验证重连后的数据库和Schema是否匹配

有时候重连后,SqlWorkbenchJ可能默认连接到了其他数据库,或者默认Schema不对,导致你找不到表。可以先执行这行SQL确认当前上下文:

SELECT current_database(), current_schema();

如果发现数据库或Schema不对,要么查询时写全路径数据库名.mydb_dev.Widget,要么切换到正确的Schema:

SET search_path TO mydb_dev;

4. 用系统视图确认表是否真的存在

如果上面的步骤都试过还是不行,换个有高权限的账号(比如超级用户)登录Redshift,查系统视图看看表到底有没有被创建:

SELECT * FROM pg_tables WHERE schemaname = 'mydb_dev' AND tablename = 'widget';

注意Redshift默认会把表名转成小写,所以这里要用widget而不是Widget(除非你创建表时用双引号把Widget包起来了)。如果查不到结果,那肯定是建表操作没被持久化,回到第一步再检查事务提交的问题。


内容的提问来源于stack exchange,提问作者hotmeatballsoup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:58:20