如何在PostgreSQL中返回“排除在外”?

如何在PostgreSQL中返回“排除在外”?,sql,postgresql,Sql,Postgresql,我希望能够在处理冲突上的后使用排除的记录的值 CREATE TABLE test\u TABLE(某些值是唯一的); 插入测试表(一些数值)值(1); 以前为准( 插入到测试表(一些)值(1) 在冲突中(有些人)什么也不做 返回被排除在外* ) 从ex中选择*; 但是,当我执行此操作时,会出现以下错误: Query Error: error: missing FROM-clause entry for table "excluded" 我认为这是因为在WITH子句之外,E

我希望能够在处理冲突上的
后使用
排除的
记录的值

CREATE TABLE test\u TABLE(某些值是唯一的);
插入测试表(一些数值)值(1);
以前为准(
插入到测试表(一些)值(1)
在冲突中(有些人)什么也不做
返回被排除在外*
)
从ex中选择*;
但是,当我执行此操作时,会出现以下错误:

Query Error: error: missing FROM-clause entry for table "excluded"

我认为这是因为在
WITH
子句之外,
EXCLUDED
表不再能够被引用。有没有一种方法可以从
WITH
子句的外部引用
排除的
表?

一种更为暴力的方法应该有效。将插入的行存储在单独的CTE中。然后,您可以删除插入的内容:

WITH to_insert (some_num) as (
       VALUES (1), (2), (3)
     ),
    i AS (
     INSERT INTO test_table (some_num)
         SELECT *
         FROM to_insert
         ON CONFLICT (some_num) DO NOTHING
         RETURNING *
    )
 SELECT ti.some_num
 FROM to_insert ti
 WHERE NOT EXISTS (SELECT 1 FROM i WHERE i.some_num = ti.some_num);

是一个dbfidde。

从手册
中,可选的RETURNING子句使INSERT根据实际插入的每一行计算并返回值。到那时,使用
EXCLUDED
已经太晚了。你想用这个做什么?触发可能更合适吗?