2013-03-06 45 views
1

有沒有什麼方法可以檢測索引是否在添加時自動生成,例如 主鍵還是唯一的約束?如何在postgresql上查找隱式生成的索引

目前我嘗試使用jdbc元數據獲取表的所有索引。但是這裏的結果也包含implizit生成的索引。我現在需要檢測是否有專用索引是自動生成的。

我已經嘗試從pg_class或pg_index等表中獲取這些信息。但沒有成功。

回答

1

我不認爲有任何方法可以區分這些索引 - 畢竟自動創建的索引和手動創建的索引之間沒有區別。

我能想到的唯一方法是堅持一些命名約定爲您的「手動」索引。然後你可以過濾掉那些不符合該命名約定的所有內容。

+0

是的,我也有這種感覺。我目前正在嘗試的是過濾出與pg_constraint表中的約束名稱相同的索引。但我不知道是否保證名稱是相同的... – Michael 2013-03-06 15:24:40

+0

@Michael:如果您手動創建一個例如唯一的約束,而不命名它('alter table foo add unique(bar)'),你會得到相同的情況。所以它也不是100%可靠的。 – 2013-03-06 15:32:28

+0

(DAT NAME ^^)....你所描述的情景似乎也適用於我描述的方法。現在,我使用下面的語句: 'SELECT * FROM 的pg_class WHERE OID IN(SELECT indexrelid FROM pg_index,pg_class裏 WHERE pg_class.relname = 'XXX' 和pg_class.oid = pg_index.indrelid) AND pg_class.relname not in( \t select from pg_constraint );' – Michael 2013-03-06 15:37:00