精华内容
下载资源
问答
  • postgresql 数据库查找主键
    千次阅读
    2020-05-12 14:39:59
    with tmp_tab as (
    	   select n.nspname as schemaname,
    			  c.oid as reloid,
    			  c.relname ,
    			  case c.relkind when 'r' then 'table' 
    							 when 'm' then 'materialized view' 
    							 when 's' then 'special' 
    							 when 'f' then 'foreign table' 
    							 when 'p' then 'table' 
    			   end as relType,
    			  pg_catalog.pg_get_userbyid(c.relowner) as ownername
    		from pg_catalog.pg_class c
    		     left join pg_catalog.pg_namespace n on n.oid = c.relnamespace
    		where 1=1
    		  --r = 普通表, i = 索引, S = 序列, t = TOAST表, v = 视图, m = 物化视图, c = 组合类型, f = 外部表, p = 分区表, I = 分区索引
    		  and  c.relkind IN ('r','p','m','f','')
    		  and n.nspname <> 'pg_catalog'
    		  and n.nspname <> 'information_schema'
    		  and n.nspname !~ '^pg_toast'
    		  and pg_catalog.pg_table_is_visible(c.oid)
    		order by 1,2
    )
    select current_database() as databasename,
           tab.schemaname,
           tab.reloid,tab.relname,tab.reltype,tab.ownername,
           pco.conname as pk_name,
           pa.attname as col_name,
           pt.typname as col_type
      from tmp_tab tab
           left outer join pg_constraint pco on pco.conrelid=tab.reloid
                                             and pco.contype = 'p'
           left outer join pg_attribute pa on pa.attrelid=tab.reloid
                                           and pa.attnum= pco.conkey [ 1 ]
           left outer join pg_type pt on pt.oid=pa.atttypid
    order by 1,2,4,7           
    
    
    
    更多相关内容
  • PostgreSQL查询表主键及注释内容

    千次阅读 2020-07-31 18:19:24
    网上关于pgSql获取表主键的内容都是千篇一律,并且对于存在多主键的场景不支持。 附上测试后可获取多个主键字段值的SQL SELECT string_agg(DISTINCT t3.attname,',') AS primaryKeyColumn ,t4.tablename AS ...

    网上关于pgSql获取表主键的内容都是千篇一律,并且对于存在多主键的场景不支持。

    附上测试后可获取多个主键字段值的SQL

    SELECT
       string_agg(DISTINCT t3.attname,',')  AS primaryKeyColumn
      ,t4.tablename AS tableName
      , string_agg(cast(obj_description(relfilenode,'pg_class') as varchar),'') as comment
    FROM
      pg_constraint t1
      INNER JOIN pg_class t2 ON t1.conrelid = t2.oid
      INNER JOIN pg_attribute t3 ON t3.attrelid = t2.oid AND array_position(t1.conkey,t3.attnum) is not null
      INNER JOIN pg_tables t4 on t4.tablename = t2.relname
      INNER JOIN pg_index t5 ON t5.indrelid = t2.oid AND t3.attnum = ANY (t5.indkey)
      LEFT JOIN pg_description t6 on t6.objoid=t3.attrelid and t6.objsubid=t3.attnum
    WHERE  t1.contype = 'p'
           AND length(t3.attname) > 0
          AND  t2.oid = '表名' :: regclass
      group by t4.tablename

    目前只找到了获取指定表的主键信息,对于批量获取没有找到。

    bug:

    对于表主键没有配置的,也会获取到第一个字段作为主键输出,如果有大佬解决了这个问题,望给与解答

    展开全文
  • pgsql 建表主键自增

    万次阅读 2019-09-11 19:50:57
    使用navicat创建postgresql数据库的时如何设定主键自增? 我们知道,在navicat中MySQL 里面有auto_increment 自增字段PostgreSQL 没有自增字段这一说法,但是有单独的对象:序列。 可以用序列或者其他方法来是实现...

    使用navicat创建postgresql数据库的表时如何设定主键自增?

    我们知道,在navicat中MySQL 里面有auto_increment 自增字段PostgreSQL
    没有自增字段这一说法,但是有单独的对象:序列。 可以用序列或者其他方法来是实现这样的语法。或者设置某一列的默认值为sequence的值即可

    在MySQL当中,我们可以通过勾选来实现ID自增,我们的navcat如下图所示:

      `area_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    

    image

    在PostgreSQL当中,我们的navcat如下图所示

    image

    在PostgreSQL当中,我们实现ID自增首先创建一个关联序列序列

    打开navcat查询列表,去创建一个序列

    CREATE SEQUENCE upms_log_id_seq START 10;

    image.gif

    然后在字段默认值里设 nextval(' upms_log_id_seq')即可。

    image

    实际生成自增主键表结构

    "area_id" int4 NOT NULL DEFAULT nextval('upms_area_id_seq'::regclass),
    

    image

    )

    PostgreSQL主要优势:

    • PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。

    • 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。

    • PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。

    • PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。

     

    原文链接:https://www.jianshu.com/p/9687c9e66cec

    展开全文
  • postgresql查看无主键 需要指定nspname=‘public’,会显示分区还是正常的 SELECT t.schemaname ,t.tablename,t.tableowner,t.tablespace, CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' ...

    需要指定sql最后部分nspname=‘public’,会显示分区表还是正常的表

    SELECT t.schemaname ,t.tablename,t.tableowner,t.tablespace,
    CASE c.relkind 
    WHEN 'r' THEN 'table' 
    WHEN 'v' THEN 'view' 
    WHEN 'm' THEN 'materialized view' 
    WHEN 'i' THEN 'index' 
    WHEN 'S' THEN 'sequence' 
    WHEN 's' THEN 'special' 
    WHEN 'f' THEN 'foreign table' 
    WHEN 'p' THEN 'partitioned table' 
    WHEN 'I' THEN 'partitioned index' 
    END as "Type" 
    FROM pg_class c,PG_TABLES t 
    where 
    t.tablename=c.relname 
    and t.schemaname not in ('pg_catalog','information_schema')
    and t.tablename not in
    (SELECT pg_class.relname TABLENAME 
    FROM pg_constraint
    INNER JOIN pg_class ON pg_constraint.conrelid = pg_class.oid
    WHERE  pg_constraint.contype = 'p' AND relnamespace IN(SELECT oid FROM pg_namespace where nspname='public'));
    

    自己新开的公众号,会不定期分享文章,感兴趣的请关注下:
    在这里插入图片描述

    展开全文
  • SELECT tb.relname AS "name", pg_size_pretty(pg_total_relation_size('"' || schemaname || '"."' || tb.relname || '"')) AS "reserved", pg_size_pretty(pg_table_size('"' || schemaname || '"."' || tb....
  • pgsql如何对已有实现主键id自增和更改字段为布尔类型
  • postgresql查询表主键

    万次阅读 2018-03-08 14:12:50
    --查询主键名称SELECT pg_constraint.conname AS pk_nameFROM pg_constraintINNER JOIN pg_class ON pg_constraint.conrelid = pg_class.oidWHERE pg_class.relname = 'table_name'AND pg_constraint.contype = '...
  • PostgreSQL数据库查询没有主键 SELECT * FROM ( SELECT pc.relname , pc2.conname , pc2.contype FROM pg_catalog.pg_class pc INNER JOIN information_schema.tables t ON t.table_name = pc....
  • SELECT t4.tablename AS tableName, string_agg(DISTINCT t3.attname,',') AS primaryKeyColumn FROM pg_constraint t1 INNER JOIN pg_class t2 ON t1.conrelid = t2.oid INNER JOIN pg_attribute t3 ON t3....
  • 主键查询和设置(postgres )

    千次阅读 2017-08-01 17:48:13
    今天库里需要建一张新,需要三个字段联合作为主键。在Navicat里是可以通过点击最后一栏设置主键的。 但是我心想,一张只有一个主键,这个1,2,3表示的是啥啊?心里有点担心的自己的主键有没有设置成功,就查...
  • PostgresSql 中查询库中所有的表以及表中字段、主键、唯一、外键,查询某一个表中的所有字段查询库中所有表查询某一个表中的所有字段查询表中所有字段、主键、唯一、外键、是否为空 查询库中所有表 select relname ...
  • 以下sql语句 用来显示PostgreSQL 结构 包括 字段名称、字段类型、是否为主键 这些信息select pg_constraint.conname as pk_name from pg_constraint inner join pg_class on pg_constraint.conrelid = pg_...
  • 查询数据库中没有创建主键 SELECT pg_class.relname,pg_constraint.conname AS pk_name FROM pg_class left JOIN pg_constraint ON pg_constraint.conrelid = pg_class.oid AND pg_constraint.contype = 'p' WH
  • postgresql 不设置主键问题

    千次阅读 2018-11-22 10:51:58
    (postgresql 使用pgadmin不能修改无主键数据,navicat 在批量复制数据时,也会因为表格没有主键导致多行数据覆盖,和复制失败等情况,当前使用insert语句是没有问题的 ) 实在是想不明白当时哪位大...
  • 现在需要把那些没有主键都加上,serial类型的字段为id 。首先是怎么找到PostgreSQL数据库中哪些没有主键?我们看下pg_class这个,里面有个relhaspkey字段,如果为t说明有主键,f即没有主键。例如下面这个sql...
  • pg PostgreSQL 查询全部备注以及全部字段的备注查询所有名称以及字段含义查看所有表名查看表名和备注查看特定表名备注查看特定名字段 查询所有名称以及字段含义 select c.relname 表名, cast ( obj_...
  • PGSQL设置主键自增的情况下添加数据出现错误的解决方法 平时我们在使用数据库的时候,能够体会到逐渐自增所带来的好处,首先因为增量增长按序存放的特性,使得数据检索的效率得到了一定的提升。其次主键自增能够保证...
  • PostgreSQL 查看结构、主键(多个)

    千次阅读 2018-10-11 15:17:16
    在网上查阅的资料都只能查出一张的一个主键(我的数据库有些是多个主键维护的),最后还是把不同的解决方法组合起来,解决了既能查看结构,也能查看多个主键。下面是SQL语句: SELECT  A.ordinal_position, ...
  • PostgreSQL数据库中获取表主键名称

    千次阅读 2020-12-24 13:03:09
    PostgreSQL数据库中获取表主键名称一、如下表示,要获取teacher表的主键信息:select pg_constraint.conname as pk_name,pg_attribute.attname as colname,pg_type.typname as typename frompg_constraint inner ...
  • 第一章 问题解决 step1 找出数据库中所有的英文名称 找出数据库中所有的英文名称,命名为A SELECT * from pg_class where pg_class....找出所有主键,命名为B SELECT pg_class.relname from pg_class whe
  • 今天库里需要建一张新,需要三个字段联合作为主键。在Navicat里是可以通过点击最后一栏设置主键的。 但是我心想,一张只有一个主键,这个1,2,3表示的是啥啊?心里有点担心的自己的主键有没有设置成功,就查了...
  • PostgreSQL主键重复处理

    2022-04-15 08:48:33
    批量往表里插入数据时,存在主键重复的情况 create sequence seq_tablename_id; select setval('seq_tablename_id', max(id)) from tablename; insert into tablename(id) values(nextval('seq__tablename_id'));
  • as 主键约束, (case when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and contype='u')>0 then 'Y' else 'N' end) as 唯一约束, (case when (select count(*) from pg_...
  • PostgreSql主键自动生成的方法

    千次阅读 2022-03-24 13:46:22
    前言 postgresql不同于mysql数据库,mysql建表时通过auto_increment关键字就可以实现主键自增, 但postgresql是通过序列和函数实现主键自动生成。 创建方法 1、主键自增长 方法一:定义序列,再定义主键调用...创建
  • PG获取自增序列主键

    2022-04-14 15:19:10
    insert into … values … Returning id(序列主键)
  • 就是我发现,一条SQL,通过主键id查询(结果条数为1000+),这样很快,0.3秒就能查出来,但是,在同一张里面,当多个根据主键查询的SQL(每个结果条数为1000+),为啥就会变慢?不都是根据主键id查吗? 结构如下...
  • pgsql分区有一个笔者非常喜欢的特性,分区列是自由的,不和唯一约束绑定,在诸如SQL Server、MySQL中,当你尝试把普通转换为分区时,会强制要求你把分区列加到唯一性约束中(主键、唯一约束/索引)...
  • 5、获取某个主键信息SELECT pg_attribute.attname AS colname, pg_type.typname AS typename, pg_constraint.conname AS pk_name FROM pg_constraint INNER JOIN pg_class ON pg_constraint.conrelid = pg_...
  • 现有以下两张 现在我想查出,每一个班级,有多少位学生 select class.id,class.name,table.studentNum from class left join --联合student和class,先查出每个班有多少个学生 (select class.id,count...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,259
精华内容 903
关键字:

pgsql查询表的主键