-
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的能力。
-
-
postgresql查看哪些表没有主键
2022-02-09 17:15:06postgresql查看无主键的表 需要指定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'));
自己新开的公众号,会不定期分享文章,感兴趣的请关注下:
-
pgsql(postgresql) 获取用户数据表,显示主键,说明,索引大小,表大小
2021-08-31 15:20:29SELECT 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自增和更改字段为布尔类型
2022-04-25 14:22:50pgsql如何对已有表实现主键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数据库查询没有主键的表
2022-04-21 09:28:18PostgreSQL数据库查询没有主键的表 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.... -
pg数据库获取库下所有表的主键信息的sql
2022-04-11 13:44:59SELECT 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 中查询库中所有的表以及表中字段、主键、唯一、外键,查询某一个表中的所有字段查询某一个表中...
2020-12-20 22:04:33PostgresSql 中查询库中所有的表以及表中字段、主键、唯一、外键,查询某一个表中的所有字段查询库中所有表查询某一个表中的所有字段查询表中所有字段、主键、唯一、外键、是否为空 查询库中所有表 select relname ... -
用SQL语句获得PostgreSQL表的主键
2018-03-16 10:53:44以下sql语句 用来显示PostgreSQL 表的表结构 包括 字段名称、字段类型、是否为主键 这些信息select pg_constraint.conname as pk_name from pg_constraint inner join pg_class on pg_constraint.conrelid = pg_... -
Postgresql 数据库大表没有主键在线增加
2021-07-22 09:02:26查询数据库中没有创建主键的表 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语句是没有问题的 ) 实在是想不明白当时哪位大... -
为PostgreSQL数据库中没有主键的表增加主键
2021-01-17 15:54:28现在需要把那些没有主键的表都加上,serial类型的字段为id 。首先是怎么找到PostgreSQL数据库中哪些表没有主键?我们看下pg_class这个表,里面有个relhaspkey字段,如果为t说明有主键,f即没有主键。例如下面这个sql... -
pg PostgreSQL 查询全部表备注,表名称,表字段,主键,索引,以及全部字段的备注,全部索引信息,字段类型
2021-05-05 14:43:21pg PostgreSQL 查询全部表备注以及全部字段的备注查询所有表名称以及字段含义查看所有表名查看表名和备注查看特定表名备注查看特定表名字段 查询所有表名称以及字段含义 select c.relname 表名, cast ( obj_... -
PGSQL主键自增的情况下添加数据可能出现错误的解决方法
2020-10-20 11:54:14PGSQL设置主键自增的情况下添加数据出现错误的解决方法 平时我们在使用数据库的时候,能够体会到逐渐自增所带来的好处,首先因为增量增长按序存放的特性,使得数据检索的效率得到了一定的提升。其次主键自增能够保证... -
PostgreSQL 查看表结构、主键(多个)
2018-10-11 15:17:16在网上查阅的资料都只能查出一张表的一个主键(我的数据库有些表是多个主键维护的),最后还是把不同的解决方法组合起来,解决了既能查看表结构,也能查看多个主键。下面是SQL语句: SELECT A.ordinal_position, ... -
PostgreSQL数据库中获取表主键名称
2020-12-24 13:03:09PostgreSQL数据库中获取表主键名称一、如下表示,要获取teacher表的主键信息:select pg_constraint.conname as pk_name,pg_attribute.attname as colname,pg_type.typname as typename frompg_constraint inner ... -
pg数据库查找出所有未建立主键的表的超级简单方法,只需要使用到一张系统表
2020-10-27 12:08:31第一章 问题解决 step1 找出数据库中所有的表英文名称 找出数据库中所有的表英文名称,命名为表A SELECT * from pg_class where pg_class....找出所有主键的表,命名为表B SELECT pg_class.relname from pg_class whe -
(转载)pg数据库系统表 +主键查询和设置(postgres )
2020-07-30 20:33:28今天库里需要建一张新表,需要三个字段联合作为主键。在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')); -
PostgreSQL pg 生成数据字典,查询表索引,主键
2021-11-22 23:43:17as 主键约束, (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:10insert into … values … Returning id(序列主键) -
pgsql数据库查询性能问题
2021-12-29 17:41:27就是我发现,一条SQL,通过主键id查询(结果条数为1000+),这样很快,0.3秒就能查出来,但是,在同一张表里面,当多个根据主键查询的SQL(每个结果条数为1000+),为啥就会变慢?不都是根据主键id查吗? 表结构如下... -
pgsql在分区表与非分区表中自由切换
2021-09-11 16:49:40pgsql分区表有一个笔者非常喜欢的特性,分区列是自由的,不和唯一约束绑定,在诸如SQL Server、MySQL中,当你尝试把普通表转换为分区表时,会强制要求你把分区列加到唯一性约束中(主键、唯一约束/索引)... -
PostgreSql 获取表、视图、字段、 主键等信息
2021-02-08 22:01:215、获取某个表的主键信息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_... -
pgsql中多表联查,查数据在另一张表的数量-6.10.20
2020-06-10 22:07:03现有以下两张表 现在我想查出,每一个班级,有多少位学生 select class.id,class.name,table.studentNum from class left join --联合student和class表,先查出每个班有多少个学生 (select class.id,count...