检查postgresql中的主键?

时间:2013-01-21 10:13:36

标签: php postgresql

我有10个数据库表,每个表都有不同名称的主键

现在我想在PHP中编写一个函数来检索基于主键的所有数据

function getdatabyid("table_name",primary_key_value)

我想以这样的方式构建一个查询:当我将这两个变量发送到函数时,它应检查该表中的主键并应该返回数据。

是否可以提前感谢

2 个答案:

答案 0 :(得分:1)

function getdatabyid($table,$pk) {

   $result = pg_query("SHOW COLUMNS FROM ". $table);
      if (pg_num_rows($result) > 0) {
         while ($row = pg_fetch_assoc($result)) {
             $result = pg_query("SELECT * FROM ". $table ." WHERE ". $row['Field'] ." = ". $pk ." LIMIT 1"); 

             if(pg_num_rows($result) > 0) {
                return $result;
             }
             else return false;
         }
      }
      else die('Incorrect table name.');
   }    
}

答案 1 :(得分:0)

以下是获取主键列名称的查询:

SELECT cu.CONSTRAINT_NAME, cu.COLUMN_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu 
WHERE EXISTS ( SELECT tc.* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
   WHERE tc.TABLE_SCHEMA = 'YOUR_TABLE_SCHEMA' 
   AND tc.TABLE_NAME = 'YOUR_TABLE_NAME' 
   and TC.CONSTRAINT_TYPE='PRIMARY KEY'
   AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME 
)

然后执行另一个查询以获取实际结果。这仍然是非常低效的 - 您最好将主键名称作为参数。