如何在postgres SQL表

时间:2016-11-16 18:46:47

标签: sql postgresql

我有这个表在我的数据库中自动创建。 这是使用\d命令对表的描述。

表“public.tableA”:

    Column  | Type      | Modifiers                      
    ----------------------------+----------+-----------------------------------------------------
     var_a  | integer   | not null
     var_b  | integer   | not null
     var_c  | bigint    | not null default nextval('var_c_sequence'::regclass)
     var_d  | integer   | 
     var_e  | integer   | 
     var_f  | smallint  | default mysessionid()
     var_g  | smallint  | default (-1)
     var_h  | boolean   | default false
     var_g  | uuid      | 

索引:

        "tableA_pkey" PRIMARY KEY, btree (var_c)
        "tableA_edit" btree (var_g) WHERE var_g <> (-1)
        "tableA_idx" btree (var_a)

检查约束:

        "constraintC" CHECK (var_f > 0 AND var_d IS NULL AND var_e IS NULL OR (var_f = 0 OR var_f = (-1)) AND var_d IS NOT NULL AND var_e IS NOT NULL)

触发器:

        object_create BEFORE INSERT ON tableA FOR EACH ROW EXECUTE PROCEDURE create_tableA()
        object_update BEFORE DELETE OR UPDATE ON tableA FOR EACH ROW EXECUTE PROCEDURE update_tableA()

我对自己创建这个表感兴趣,而且我不太清楚如何手动定义这些索引,任何想法?

1 个答案:

答案 0 :(得分:0)

除非我完全错过了这艘船:

alter table public."tableA"
    add constraint "tableA_pkey" PRIMARY KEY (var_c);

create index "tableA_edit" on public."tableA" (var_g) WHERE var_g <> (-1);
create index "tableA_idx" on public."tableA" (var_a);

Btree是默认的,所以我不打算另外指定,但你可以随意。

您没有问,但检查约束语法是:

alter table public."tableA"
    add constraint "constraintC"
    CHECK (var_f > 0 AND var_d IS NULL AND var_e IS NULL OR 
    (var_f = 0 OR var_f = (-1)) AND var_d IS NOT NULL AND var_e IS NOT NULL)

顺便说一句,作弊只是看PgAdmin中的DDL。

所有这一切,我通常不鼓励在表格周围使用“quoteS”强制执行大写/小写。有些情况下它是有意义的(否则,为什么会存在功能),但在许多情况下它会在未来创造出如此多的额外工作。在索引名称的情况下,它甚至不会给你任何东西,因为你并没有在任何SQL中真正引用它们。