如何捕获插入到包含标识列的Redshift表中的行数?

时间:2016-10-31 13:28:07

标签: amazon-redshift identity-column

在Amazon Redshift中,我使用以下查询来捕获上一个查询插入的行数:

SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id();

当我插入包含IDENTITY列的表时,这种方法似乎不起作用,因为Redshift也运行此查询:SELECT * FROM stv_identity_highwater并将此查询的id用于pg_last_query_id()

是否有其他方法可以捕获此场景中插入的行数?

3 个答案:

答案 0 :(得分:2)

要在带有标识列的表中插入值,Redshift会在内部触发查询SELECT * FROM stv_identity_highwater,因此计数结果为0

添加pg_last_query_id()-1以获取插入次数:

SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;

答案 1 :(得分:1)

您可以使用STL_QUERY系统表来提取您想要计算的查询的ID。

如果您是系统的唯一用户,您可以假设您倒数第二个查询是您所寻求的。

答案 2 :(得分:0)

不幸的是,这不起作用:

SELECT SUM(rows) FROM stl_insert WHERE query = pg_last_query_id()-1;

因为query_id在Redshift中不是连续的。

单个表的检索方式是:

      WITH last_queryid_for_table AS (

           SELECT query, MAX(si.starttime) OVER () as last_q_stime, si.starttime as stime  FROM stl_insert si,
           SVV_TABLE_INFO sti WHERE sti.table_id=si.tbl AND sti."table"='$your_table_name' 
)

           SELECT SUM(rows) FROM stl_insert si, last_queryid_for_table lqt 
           WHERE si.query=lqt.query AND lqt.last_q_stime=stime
  • 当然,应该考虑查询是否失败。如果最后一个结果失败,则上述查询将为您提供最新的执行状态。