1

我有一个更新脚本,它接受一些参数,其中一个是用于识别正确行的主键元组。但是,我不检查以确保密钥在我的代码中是主要的,我愿意这样做。我不想把它留给实现脚本的人。如果我必须运行一个额外的查询也没关系,我只想在代码中前进之前检查这个元组中的每个键是否都是主键。谢谢!

编辑:(增加一些清晰度)。所以,想象一下我有一个脚本,它接受一个表名和一个键列表。我想检查这些键中的每一个是否都是给定表中的主键。

4

2 回答 2

3

好吧,我找到了一个答案,也许不是最好的。我正在寻找某种函数/查询,它会返回一个布尔值,指示键是否是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(",") 。然后,您可以检查。

于 2013-10-24T15:01:05.470 回答
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           │
└─────────────┘
于 2013-10-24T15:35:36.587 回答