pgsql遇到小问题及小功能记录

2023-11-02

一、问题:

1、ERROR: invalid input syntax for integer: ""

使用COALESCE((、a.delete_flag,'0')::int as delete_flag报错,因为delete_flag里面包含空值(''):

改为:COALESCE(NULLIF(pri.delete_flag,''),'0')::int as delete_flag 即可

将空值先替换为null,再转换

二、小功能记录

1、添加字段,修改字段,添加注释

--添加列:

ALTER TABLE 表名 ADD COLUMN  列明   varchar(100) ;

--修改字段长度
ALTER TABLE dw.dim_drug alter COLUMN trade_cn_name type character varying(100);

--添加注释

COMMENT ON COLUMN 表名   IS  '注释';

2、问题 :MYSQL单表5000W,我想一次删除2000W数据。有什么好办法?正常delete会非常慢,另外会造成主备高延时

       1、创建临时表,表结构与原表结构相同,将数据插入临时表,再删除原表,再修改临时表表名为原表。新数据插入的问题;
        2、创建分区,删除分区;
        3、limit删除。IO问题;
        4、假删除,update,修改delete_flag;

3、查看当前正在运行的SQL--查看任务记录详情

SELECT
    procpid,
    START,
    now() - START AS lap,
    current_query
FROM
    (
        SELECT
            backendid,
            pg_stat_get_backend_pid (S.backendid) AS procpid,
            pg_stat_get_backend_activity_start (S.backendid) AS START,
            pg_stat_get_backend_activity (S.backendid) AS current_query
        FROM
            (
                SELECT
                    pg_stat_get_backend_idset () AS backendid
            ) AS S
    ) AS S
WHERE
    current_query <> '<IDLE>'
ORDER BY
    lap ASC;

procpid:进程id 
start:进程开始时间 
lap:经过时间 
current_query:执行中的sql 
怎样停止正在执行的sql 
SELECT pg_cancel_backend(进程id); 
或者用系统函数 
kill -9 进程id;

4、查看当前事务锁等待、持锁信息的SQL

with    
t_wait as   --等待SQL 
(    
  select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,   
  a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fastpath,    
  b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name   
    from pg_locks a,pg_stat_activity b where a.pid=b.pid and not a.granted   
),   
t_run as   --正在运行的SQL
(   
  select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,   
  a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.transactionid,a.fastpath,   
  b.state,b.query,b.xact_start,b.query_start,b.usename,b.datname,b.client_addr,b.client_port,b.application_name   
    from pg_locks a,pg_stat_activity b where a.pid=b.pid and a.granted   
),   
t_overlap as   
(   
  select r.* from t_wait w join t_run r on   
  (   
    r.locktype is not distinct from w.locktype and   
    r.database is not distinct from w.database and   
    r.relation is not distinct from w.relation and   
    r.page is not distinct from w.page and   
    r.tuple is not distinct from w.tuple and   
    r.virtualxid is not distinct from w.virtualxid and   
    r.transactionid is not distinct from w.transactionid and   
    r.classid is not distinct from w.classid and   
    r.objid is not distinct from w.objid and   
    r.objsubid is not distinct from w.objsubid and   
    r.pid <> w.pid   
  )    
),    
t_unionall as    
(    
  select r.* from t_overlap r    
  union all    
  select w.* from t_wait w    
)    
select locktype,datname,relation::regclass,page,tuple,virtualxid,transactionid::text,classid::regclass,objid,objsubid,   
string_agg(   
'Pid: '||case when pid is null then 'NULL' else pid::text end||chr(10)||   
'Lock_Granted: '||case when granted is null then 'NULL' else granted::text end||' , Mode: '||case when mode is null then 'NULL' else mode::text end||' , FastPath: '||case when fastpath is null then 'NULL' else fastpath::text end||' , VirtualTransaction: '||case when virtualtransaction is null then 'NULL' else virtualtransaction::text end||' , Session_State: '||case when state is null then 'NULL' else state::text end||chr(10)||   
'Username: '||case when usename is null then 'NULL' else usename::text end||' , Database: '||case when datname is null then 'NULL' else datname::text end||' , Client_Addr: '||case when client_addr is null then 'NULL' else client_addr::text end||' , Client_Port: '||case when client_port is null then 'NULL' else client_port::text end||' , Application_Name: '||case when application_name is null then 'NULL' else application_name::text end||chr(10)||    
'Xact_Start: '||case when xact_start is null then 'NULL' else xact_start::text end||' , Query_Start: '||case when query_start is null then 'NULL' else query_start::text end||' , Xact_Elapse: '||case when (now()-xact_start) is null then 'NULL' else (now()-xact_start)::text end||' , Query_Elapse: '||case when (now()-query_start) is null then 'NULL' else (now()-query_start)::text end||chr(10)||    
'SQL (Current SQL in Transaction): '||chr(10)||  
case when query is null then 'NULL' else query::text end,    
chr(10)||'--------'||chr(10)    
order by    
  (  case mode    
    when 'INVALID' then 0   
    when 'AccessShareLock' then 1   
    when 'RowShareLock' then 2   
    when 'RowExclusiveLock' then 3   
    when 'ShareUpdateExclusiveLock' then 4   
    when 'ShareLock' then 5   
    when 'ShareRowExclusiveLock' then 6   
    when 'ExclusiveLock' then 7   
    when 'AccessExclusiveLock' then 8   
    else 0   
  end  ) desc,   
  (case when granted then 0 else 1 end)  
) as lock_conflict  
from t_unionall   
group by   
locktype,datname,relation,page,tuple,virtualxid,transactionid::text,classid,objid,objsubid ;


5、查看活跃进程          

SELECT datname,pid,state,query FROM pg_stat_activity where state='active'


6、删除活跃进程          

SELECT pg_cancel_backend(61032)


7、查看锁表

select
 T.PID,
 T.STATE,
 T.QUERY,
 T.WAIT_EVENT_TYPE,
 T.WAIT_EVENT,
 T.QUERY_START
from
 PG_STAT_ACTIVITY T
where
 T.DATNAME ='zyzl_jgpt'
 and T.WAIT_EVENT_TYPE ='Lock';

8、pgsql序列的创建、修改、删除

#创建一个序列
CREATE SEQUENCE xxx_no_seql INCREMENT BY 1 maxvalue 99999999 START 10000000;
#设置序列从20000001开始 修改 两种方法都可
SELECT setval('xxx_no_seql',20000001);
alter sequence xxx_no_seql restart with 20000001
#使用
SELECT nextval('xxx_no_seql');
#查看 r =普通表, i =索引,S =序列,v =视图,m =物化视图, c =复合类型,t = TOAST表,f =外部表
select * from pg_class where relkind='S';
#删除
drop sequence xxx_no_seql;

函数                    描述
currval(regclass)    返回最近一次用 nextval 获取的指定序列的数值
nextval(regclass)    递增序列并返回新值
setval(regclass, bigint)    设置序列的当前数值
setval(regclass, bigint, boolean)    设置序列的当前数值以及 is_called 标志

9.查询索引:

SELECT
	n.nspname AS schemaname,
    c.relname AS tablename,
    i.relname AS indexname,
    t.spcname AS tablespace,
    pg_get_indexdef(i.oid) AS indexdef
FROM pg_index x
    JOIN pg_class c ON c.oid = x.indrelid
    JOIN pg_class i ON i.oid = x.indexrelid
    LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
    LEFT JOIN pg_tablespace t ON t.oid = i.reltablespace
WHERE (c.relkind = ANY (ARRAY['r'::"char", 'm'::"char"])) 
AND i.relkind = 'i'::"char"

10.替换空格、换行、回车字符

UPDATE table set name = trim(name);//用来删除数据前后的空格 
UPDATE table set name = rtrim(name);//用来删除数据前的空格 
UPDATE table set name = ltrim(name);//用来删除数据后的空格 
UPDATE table set name = REPLACE(name,' ','');//用来删除数据中的空格 
UPDATE table set name =REPLACE(name, CHR(10), '') //替换换行符 
UPDATE table set name =REPLACE(name, CHR(13), '') //替换回车符

11.查询字段名、字段类型及字段长度和字段注释

select a.attnum AS "序号",
c.relname AS "表名",
cast(obj_description(relfilenode,'pg_class') as varchar) AS "表名描述",
a.attname AS "列名",
concat_ws('',t.typname,SUBSTRING(format_type(a.atttypid,a.atttypmod) from '\(.*\)')) as "字段类型",
d.description AS "备注"
from pg_class c, pg_attribute a , pg_type t, pg_description d 
where  c.relname = 't_bt_data'
and a.attnum>0 
and a.attrelid = c.oid 
and a.atttypid = t.oid 
and  d.objoid=a.attrelid
and d.objsubid=a.attnum
ORDER BY c.relname DESC,a.attnum ASC ;

12.查询表主键名称;

select distinct  pg_constraint.conname as pk_name,bb.st from
pg_constraint inner join pg_class
on pg_constraint.conrelid = pg_class.oid
inner join pg_attribute on pg_attribute.attrelid = pg_class.oid
--and pg_attribute.attnum = pg_constraint.conkey::array
inner join pg_type on pg_type.oid = pg_attribute.atttypid
inner join (select tablename,schemaname||'.'||tablename st  from pg_tables where schemaname = 'ods' order by tablename) bb on pg_class.relname = bb.tablename
where pg_constraint.contype='p' 
order by st

1、删除主键

ALTER TABLE "table_name" DROP CONSTRAINT "table_name_pkey";
2. 增加主键约束

ALTER TABLE "table_name" add primary key (xx,xx,xx);
 

13.根据一张表update另一张表数据

单列:

UPDATE TABLE A
    SET ( district ) = ( SELECT district FROM table2 b WHERE A.site = b.site )
WHERE
    bustype = 1;
 

多列:

UPDATE TABLE A
    SET ( column01, colum02, column03 ) = (
SELECT
    b.column01, b.column02,
    b.column03
FROM
    table2 b
WHERE
    A.COLUMN = b.COLUMN)
 

添加行号,删除重复数据:

DELETE 
FROM
    tableA 
WHERE
    ID IN (
SELECT ID 
FROM
    ( SELECT ROW_NUMBER () OVER ( PARTITION BY column01, column02 ), ID FROM tableA ) AS T 
WHERE
    T.ROW_NUMBER > 1 
    );
 

14、需要按照某个字段里面值进行排序

order by case when clume_name like '值' then 1 else 2,id

即可实现将clume_name 列包含‘值’的排列在前面

持续更新中,敬请期待!!!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pgsql遇到小问题及小功能记录 的相关文章

  • 如何证明2条sql语句是等价的

    我开始用连接和子语句重写一个复杂的 SQL 语句 并获得一个看起来更简单的语句 我通过在相同的数据集上运行并获得相同的结果集来测试它 一般来说 我如何 概念上 证明这两个陈述在任何给定数据集中都是相同的 我建议学习关系代数 正如 Mchl
  • 如何在 postgresql 中使用“时间”字段按小时分组?

    我有一张带有一列的桌子ctime类型的time without time zone cdate ctime 2016 12 24 12 02 17 2016 12 24 12 02 32 2016 12 24 12 03 00 2016 1
  • 使用 MYSQL 创建随机数

    我想知道是否有一种方法可以选择 100 到 500 之间随机生成的数字以及选择查询 Eg SELECT name address random number FROM users 我不必将此数字存储在数据库中 而只需使用它来显示目的 我尝试
  • Django 视图中的原始 SQL 查询

    我将如何使用原始 SQL 执行以下操作views py from app models import Picture def results request all Picture objects all yes Picture objec
  • 会员提供商使用还是不使用?

    我正在开发一个使用 Facebook 的网站 现在为了管理用户我想使用MembershipProvider并选择开发一个定制的会员提供商 我的问题是我的数据库架构与标准成员资格架构不匹配 并且提供的用于覆盖的函数采用与我预期不同的参数 例如
  • “已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。”

    我正在开发需要连接到另一个数据库以获取一些数据的应用程序 为此 我决定使用 SqlConnection reader 等 我需要执行一些查询 例如首先我需要获取某个用户的卡 ID 之后我需要通过该卡 ID 获取一些数据 这是我的代码 reg
  • 使用每个单独行的多个“where”子句更新多行

    我正在尝试像这样更新我的表 Update MyTable SET value 1 WHERE game id 1 x 4 y 8 SET value 2 WHERE game id 1 x 3 y 7 SET value 3 WHERE g
  • 使用临时表替换 WHERE IN 子句

    我让用户输入我需要在表中查询的值列表 该列表可能非常大 并且长度在编译时未知 而不是使用WHERE IN 我认为使用临时表并对其执行联接会更有效 我在另一个SO问题中读到了这个建议 目前找不到它 但会在找到时进行编辑 要点是这样的 CREA
  • SQL Server 2008 R2 DMV - sys.dm_sql_referencing_entities - 查询用法

    我正在尝试使用以下命令获取表列表的所有依赖项sys dm sql referencing entities DMV 这个查询给了我所有表的列表 SELECT TableName from FinalTableList 此查询给出 Table
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • SQL Server - 如何向登录名授予对所有数据库的读取访问权限?

    我需要向新登录授予对服务器上所有 300 个数据库的读取权限 如何在不选中用户映射区域中的 300 个复选框的情况下完成此操作 一种方法是在 SSMS 的查询菜单上设置 结果为文本 然后执行以下命令 它实际上并不进行更改 而是生成一个脚本供
  • SQL 性能,使用 OPTION (FAST n)

    谁能告诉我在 SQL 查询中使用 OPTION FAST n 有什么缺点 比如我这么快就抓取了10万条记录 但这对SQL Server的其他进程有影响吗 我正在接近我的问题 我必须每周运行一次数据处理 因此 第一个结果会在 5 7 秒后出现
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • SQL FORMAT 函数错误

    这个SQL select FORMAT lNum from rpt myView 产生以下错误 参数数据类型 varchar 对于格式的参数 1 无效 功能 lNum is a varchar 10 运行 SQL Server 2012 v
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU

随机推荐

  • java反射详解

    本篇文章依旧采用小例子来说明 因为我始终觉的 案例驱动是最好的 要不然只看理论的话 看了也不懂 不过建议大家在看完文章之后 在回过头去看看理论 会有更好的理解 下面开始正文 案例1 通过一个对象获得完整的包名和类名 1 2 3 4 5
  • STM32学习——FATFS文件系统

    目录 什么是文件系统 常用的文件系统 FATFS的特点 FATFS层次结构 移植步骤 相关配置宏 FATFS文件系统移植实验 FATFS程序结构图 FATFS底层设备驱动函数 宏定义 设备状态获取 设备初始化 读取扇区 扇区写入 什么是文件
  • 代码质量检测工具 QAPLug

    代码质量检测工具 情景 写完代码一定要别人review才发现bug或不好的语法或多余的变量是一件多么尴尬的事情 如果想在写代码时或者写代码后自己能发现问题 那么代码QA工具无疑是你必备的工具 工具 QAPlug就是一款实用十分方便的代码质量
  • [游戏] chrome 的小彩蛋

    在电脑上不了网时 chrome 显示无法显示此网页的同时 还会有一个小游戏可以玩 用户可以操作空格键来控制一只小恐龙让它跳过灌木丛
  • Python 实现逐步回归

    常用评价指标简介 当前统计学以计算机科学作为支撑 机器于人工的优势是计算速度 但机器无法自行判断运算何时退出 因此需要定量指标作为运算退出的标志 对于预测类的统计模型来说 常见的指标有赤池信息准则 AIC 贝叶斯信息准则 BIC R方 RO
  • 冒泡排序、选择排序、插入排序 原理及Java代码实现

    1 冒泡排序 冒泡排序 Bubble Sort 是一种计算机科学领域的较简单的排序算法 冒泡排序算法的原理如下 1 比较相邻的元素 如果第一个比第二个大 就交换他们两个 2 对每一对相邻元素做同样的工作 从开始第一对到结尾的最后一对 在这一
  • Cpp学习——动态内存管理

    目录 一 new 1 malloc realloc calloc的使用不便之处 2 new的好处 3 opreator new 二 delete 1 为什么要有delete 2 为什么要匹配使用 一 new 1 malloc realloc
  • 【论文精读】NeRF详解

    最近阅读了开启三维重建新纪元的经典文章 NeRF Representing Scenes as Neural Radiance Fields for View Synthesis 接下来会 更新NeRF系列的论文精读 代码详解 力求做到全网
  • SpringBoot2.x 集成 Swagger3(springdoc-openapi)

    Swagger是一款RESTFUL接口的文档在线自动生成加功能测试的软件 提供描述 生产 消费和可视化RESTful Web Service Swagger也是一个api文档维护组织 后来成为了OpenAPI 一个业界的api文档标准 标准
  • 赛联区块链培训课程介绍

    基础版
  • 谷歌V8引擎运行机制概览

    最近学习了极客时间上李兵大佬的谷歌V8引擎课程 总结了一下 在公司内部小组分享了一波 在此也分享一下 原理图直接用的专栏的图 由于时间有限 总结略显粗糙 注 解释执行 编译执行各有优缺点 解释执行 不需要做过多的编译 所以启动快 执行时不时
  • 如何让footer始终在页面底部固定

    footer height 50px position fixed bottom 0px left 0px right 0px 参考 https www cnblogs com lk kk p 4654832 html
  • 已 树莓派4b ros 系统 网盘_树莓派4B初次使用--系统安装

    准备 硬件 树莓派本体 读卡器 TF卡 电源线 HDMI连接线 可选 显示器 可选 软件 SDFormatter格式化工具 Win32DiskImager烧录工具 Finalshell Cellular Z 技术规格 首先 来看看树莓派4的
  • 四川对口高职计算机录取分数,四川录取分数线 四川对口高职录取分数线出炉!!!...

    四川对口高职录取分数线出炉 你在线吗 快来看看 成都纺织学院5141 四川中医学院5146 成都航空空职业技术学院5151 四川交通职业技术学院5152 达州职业技术学院5153 四川工程技术学院5155 绵阳职业技术学院5157 四川建筑
  • 【Unity-学习-014】EasyAR4.0稀疏空间地图 扫描场景功能

    本帖主要描写扫描场景的功能实现 以及一些需要注意的问题 跟上层贴有所关联 想要更多了解请移步链接 场景中有几个重要的预设需要添加 目录如下 其中 SparseSpatialMap 用于扫描空间成成点云信息 点云可以将空间数据以点的信息保存下
  • 跟踪路由 Tracert

    跟踪路由 Tracert 2007年04月20日 09 03 A M Tracert 跟踪路由 是路由跟踪实用程序 用于确定 IP 数据报访问目标所采取的路径 Tracert 命令用 IP 生存时间 TTL 字段和 ICMP 错误消息来确定
  • TMX瓦片地图无法加载问题

    1 cocos2d x 加载tmx图片失败 重新编译运行时加载出错 提示 TMX Only 1 tilset per layer is supported 原来是同一个图层上只能使用同一图块资源的元素 必须要新建一个图层 将新添加的元素布局
  • 虚拟机克隆两网卡冲突

    常见网卡设置 vim etc sysconfig network scripts ifcfg ens33 TYPE Ethernet BOOTPROTO static DEFROUTE yes NAME ens33 UUID 025f788
  • 云计算虚拟化技术与开发-------虚拟化技术应用第一章内容(虚拟化技术概念、虚拟化特征、虚拟化目的、半虚拟化和全虚拟化特点和区别、虚拟化实现的三种结构的特点和区别)

    目录 虚拟化技术第一章主要内容 虚拟化技术的概念 虚拟化的特征 虚拟化的目的 虚拟化与云计算的关系 半虚拟化和全虚拟化的特点和区别 虚拟化实现的三种结构的特点和区别 虚拟化技术第一章主要内容 虚拟化技术的概念 虚拟化 Virtualizat
  • pgsql遇到小问题及小功能记录

    一 问题 1 ERROR invalid input syntax for integer 使用COALESCE a delete flag 0 int as delete flag报错 因为delete flag里面包含空值 改为 COA