【发布时间】:2016-05-20 15:21:24
【问题描述】:
我正在使用 ColdFusion 连接到 RedShift 数据库,并且我正在尝试了解如何测试/假设自己如何连接与 RedShift 中的 TEMP 表相关的工作。
在我的数据源的 CFADMIN 中,我 未选中
Maintain connections across client requests。我会假设每个使用我的网站的用户都有自己的数据库“连接”?对吗?根据有关临时表的 RedShift 文档:
TEMP:创建仅在当前会话中可见的临时表的关键字。该表在创建它的会话结束时自动删除。临时表可以与永久表同名。临时表是在单独的、特定于会话的模式中创建的。 (您不能为此架构指定名称。)此临时架构成为搜索路径中的第一个架构,因此临时表将优先于永久表,除非您使用架构名称限定表名以访问永久表。
我是否理解如果 #1 为真,并且每个用户都有自己的数据库连接,因此每个用户都有自己的会话,那么每个 #2 创建的任何表都将仅在该会话中,即使“用户”是与来自我的服务器的连接使用相同的凭据相同。
3.如果我在 #1 和 #2 中的假设是正确的,那么如果我有运行如下查询的 ColdFusion 代码:
drop if exists tablea
create temp table tablea
insert into tablea
select * from realtable inner join
drop tablea
并且多个用户正在使用执行此操作的相同功能。他们不应该遇到任何冲突,即一个表被删除,因为另一个请求试图正确使用它?
- 如何测试是否是这种情况?除了将其投入生产并等待错误之外,我怎么知道。我尝试在不同的浏览器和其他东西中并排运行几个窗口,但没有发现问题,但我不知道如何知道客户端之间的临时表是否真的不同。 (应该如此。)我想我可以查询一些元数据,但是关于表的哪些元数据会告诉我呢?
【问题讨论】:
-
当我查询
stv_sessions时,我可以看到我的用户名有多个会话。 -
免责声明,我不熟悉红移,但您描述的是(非全局)临时表在 SQL Server 等数据库中的行为方式。同一个“用户”可以创建多个会话,但在一个会话中创建的临时表对其他会话不可见。不确定这是否有帮助,但[此线程提到检查 STV_TBL_PERM](BNohttp://stackoverflow.com/questions/24561837/conditionally-drop-temporary-table-in-redshift)。
-
你知道从服务器到数据库的连接吗?我谈到的 CF 中的设置似乎表明每个客户端请求(不确定该定义是什么)都会有一个唯一的连接,因此是唯一的会话,对吗?
-
正确。当“维护连接”被禁用时,每个请求都应该创建一个新的连接,这构成一个单独的数据库“会话”。
-
如果这是真的,那么我假设单个会话处于活动状态并且 CF 保持打开状态,直到特定用户超时。所以
usera登录我的应用程序并积极使用它一个小时。他们本可以只开一个小时的课程。userb登录我的应用程序,每 25 分钟才处理一次。由于我的数据源连接超时时间为 20 分钟,因此他们每次都会有不同的数据库会话。
标签: coldfusion amazon-redshift