2013-10-23 24 views
0

我有一個更新腳本,它接受一些參數,其中一個參數是主鍵的元組,用於標識正確的行。但是,我不檢查以確保密鑰在我的代碼中是主要的,我想。我不想讓任何人執行腳本。如果我必須運行一個額外的查詢,這很好,我只想在代碼中向前移動之前檢查此元組中的每個鍵都是主鍵。謝謝!如何檢查密鑰是否爲主psycopg2

編輯:(增加一些清晰度)。所以,想象一下,我有一個腳本,它包含一個表名和一個鍵列表。我想檢查這些鍵中的每一個在給定表中都是主要的。

+0

問題是對我來說還不夠清楚,但看起來像你可以使用系統目錄來獲得你需要的信息 - http://www.postgresql.org/docs/current/static/catalogs.html –

回答

1

找出一個表,應在任何SQL數據庫工作的主鍵列的一般方法是這樣的:

SELECT column_name 
FROM information_schema.table_constraints 
    JOIN information_schema.key_column_usage 
     USING (constraint_catalog, constraint_schema, constraint_name, 
       table_catalog, table_schema, table_name) 
WHERE constraint_type = 'PRIMARY KEY' 
    AND (table_schema, table_name) = ('yourschema', 'yourtable') 
ORDER BY ordinal_position; 

返回類似

┌─────────────┐ 
│ column_name │ 
├─────────────┤ 
│ a   │ 
│ b   │ 
└─────────────┘ 
+0

我試過了,但它只是返回一個空的結果列表,這是在psql中的工作? –

+0

是的,它應該適用於所有客戶。 –

2

嗯,我找到了一個答案,也許不是最好的。我正在尋找某種函數/查詢,它將返回一個布爾值,指示該密鑰是否爲primary_key。這樣,我返回一個主鍵列表並檢查我的鍵是否在該列表中。

一些代碼:

sql = "select indexdef from pg_indexes where tablename = '%s';" % (table,) 
self.cursor.execute(sql) 
rows = self.cursor.fetchall() 
row = rows[0][0] 

從那裏,你可以在您認爲合適削減了結果字符串。我基本上只是剝去了無用的文本,直到我用逗號分隔主鍵,並在其上做了一個string.split(「,」)。然後,你可以檢查。

相關問題