在Postgres 9.5

时间:2016-10-26 11:18:04

标签: postgresql jdbc postgresql-9.5

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

任何想法我都缺少什么?

1 个答案:

答案 0 :(得分:1)

显然,使用with check option

的视图不支持此功能

如果删除with cascaded check option,则此功能正常。

手册中没有明确提及,因此这可能是文档疏忽。