PostgreSQL版本:9.5.4
我有一个表定义为:
CREATE TABLE IF NOT EXISTS TEST_1 (
ID SERIAL PRIMARY KEY,
C1 BYTEA,
C2 TEXT NOT NULL,
C3 BOOLEAN NOT NULL DEFAULT FALSE,
CONSTRAINT TEST_1_unique_idx UNIQUE(C1, C2)
);
我将视图定义为:
create or replace view test as select * from test_1 with cascaded check
option;
当应用程序代码是从表名中抽象时,这是必要的 通过视图名称工作(在需要时实现一种简单的分区替换表)
当我在查看:
上运行以下查询时insert into test (c1, c2, c3) values (decode('MTIzAAE=', 'base64'), 'text', true) on conflict (c1, c2) do update set c3=excluded.c3
我收到以下错误:
[0A000] ERROR: ON CONFLICT is not supported on table "test" used as a catalog table
Position: 83
但表上的相同查询按预期工作。根据Postgres文档,这应该适用于视图,因为ON CONFLICT完全支持可更新视图https://www.postgresql.org/docs/9.5/static/sql-createview.html
任何想法我都缺少什么?
答案 0 :(得分:1)
显然,使用with check option
如果删除with cascaded check option
,则此功能正常。
手册中没有明确提及,因此这可能是文档疏忽。