我有这个表在我的数据库中自动创建。
这是使用\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()
我对自己创建这个表感兴趣,而且我不太清楚如何手动定义这些索引,任何想法?
答案 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中真正引用它们。