Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 获取表主键的所有实例_Postgresql_Key_Instances - Fatal编程技术网

Postgresql 获取表主键的所有实例

Postgresql 获取表主键的所有实例,postgresql,key,instances,Postgresql,Key,Instances,这是我需要的一个简单示例,对于任何给定的表,我需要获取主键的所有实例,这是一个小示例,但我需要一种通用的方法来实现 create table foo ( a numeric ,b text ,c numeric constraint pk_foo primary key (a,b) ) insert into foo(a,b,c) values (1,'a',1),(2,'b',2),(3,'c',3); 选择 结果 a|b 1 |1|a| 2 |2|b| 3

这是我需要的一个简单示例,对于任何给定的表,我需要获取主键的所有实例,这是一个小示例,但我需要一种通用的方法来实现

create table foo
(
 a numeric
,b text
,c numeric
constraint pk_foo primary key (a,b)
)

insert into foo(a,b,c) values (1,'a',1),(2,'b',2),(3,'c',3);
选择

结果

      a|b
   1 |1|a|
   2 |2|b|
   3 |3|c|
   ..   ...
我需要控制主键的实例是否被用户更改,但我不想在太多的表中重复代码!我需要一个通用的方法,我会把
在PostgreSQL中,在更新之前将其置于触发器上的函数中,诸如此类……

必须始终为查询提供结果类型。但是,您可以获取所需查询的代码,然后从客户端执行查询:

create or replace function get_key_only_sql(regclass) returns string as $$
select 'select '|| (
          select string_agg(quote_ident(att.attname), ', ' order by col)
          from pg_index i
          join lateral unnest(indkey) col on (true)
          join pg_attribute att on (att.attrelid = i.indrelid and att.attnum = col)
          where i.indrelid = $1 and i.indisprimary
          group by i.indexrelid
          limit 1) || ' from '||$1::text
end;
$$ language sql;
下面是一些使用上述函数的客户端伪代码:

sql = pgexecscalar("select get_key_only_sql('mytable'::regclass)");
rs = pgopen(sql);

Java可以吗?还是希望它成为纯SQL?你是说唯一键、候选键还是其他什么?(幸运的是)你不能只用SQL来做这件事。@BradleyRoss是的,只有SQL,只有我想知道任何给定表的主键的实例是的,这项工作!我的问题是,我不知道如何获取给定表的主键的列名,但您可以破解它!谢谢你提供的信息。我以前用SQL做过,但对于Postgres我用过JDBC。