2016-11-16 41 views
0

我有這張表,它是在我的數據庫中自動創建的。 這是使用\d命令的表格說明。如何在postgres SQL表中重新定義索引

表 「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

你應該展示你正在處理的一些代碼。用戶將嘗試改進併爲您的問題找到解決方案。 – McNets

+1

嘗試在數據庫上運行['pg_dump -s'](https://www.postgresql.org/docs/current/static/app-pgdump.html)? – Kevin

回答

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); 

B樹是默認的,所以我也懶得指定,但你可以的,如果你想要的。

你沒問,但檢查約束的語法是:

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) 

順便說一句,作弊將是隻看DDL在pgAdmin的。所有這一切說,我通常不鼓勵在表格周圍使用「quoteS」來強制大寫/小寫。有些情況下它是有意義的(否則,爲什麼會存在這種功能),但在很多情況下,它在未來會創造出很多額外的工作。在索引名稱的情況下,它甚至不會爲你購買任何東西,因爲你不用任何SQL來引用它們。