数据库
文章平均质量分 78
Moshow郑锴
Powered by Core iMoshow
展开
-
PgSQL之WITH Queries/Statement
在 PostgreSQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE),也可以当做一个为查询而存在的临时表。WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。原创 2024-04-16 00:16:16 · 1655 阅读 · 2 评论 -
PostgreSQL Error Codes (PostgreSQL错误代码)
PostgreSQL服务器发出的所有消息都分配了五个字符的错误代码, 这些代码遵循 SQL 的"SQLSTATE"代码的约定。 需要知道发生了什么错误条件的应用程序通常应该检测错误代码,而不是查看文本错误消息。 这些错误代码不太可能随着PostgreSQL的版本的更新而修改, 并且一般也不会随着错误消息的本地化而发生修改。请注意有些(但不是全部) PostgreSQL生成的错误代码是由 SQL 标准定义的; 有些标准里并没有定义的错误条件会被发明或者是从其它数据库借过来。根据标准,错误代码的头两个字符表示错原创 2024-02-18 22:24:13 · 1199 阅读 · 0 评论 -
SQL Error [42501]: ERROR: must be superuser or have privileges of the pg_read_server_files role
如果你的pgsql遇到“SQL Error [42501]: ERROR: must be superuser or have privileges of the pg_read_server_files role to COPY from a file Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.”那么通常是由于你使用Copy命令导入Csv文件但是当前DB用户权限不够原创 2024-02-18 22:18:45 · 887 阅读 · 0 评论 -
PostgreSQL之SEMI-JOIN半连接
Semi-Join半连接,当外表在内表中找到匹配的记录之后,Semi-Join会返回外表中的记录。但即使在内表中找到多条匹配的记录,外表也只会返回已经存在于外表中的记录。而对于子查询,外表的每个符合条件的元组都要执行一轮子查询,效率比较低下。此时使用半连接操作优化子查询,会减少查询次数,提高查询性能。其主要思路是将子查询上拉到父查询中,这样内表和外表是并列关系,外表的每个符合条件的元组,只需要在内表中找符合条件的元组即可,所以效率会大大提高。当参与等值JOIN的表达式存在有重复值。原创 2024-01-11 21:51:29 · 1121 阅读 · 0 评论 -
PostgreSQL DBA之数据库指标监控
此文先给PGDBA日常运维必关注的PostgreSQL指标监控SQL原创 2023-12-13 14:37:40 · 730 阅读 · 0 评论 -
MySQL数据脱敏(Data masking plugin functions)
对于企业而言,数据脱敏可以在数据共享或测试时用于保护敏感数据(如信用卡,社保卡,地址等)。通过对敏感数据进行脱敏处理,组织可以最大限度地降低数据泄露和未经授权访问的风险,同时仍能够使用真实的开发,测试和分析目的所需的数据。有很多方法进行数据脱敏,比如遮挡,替换,洗牌和加密,等等,它们适用于不同场景。本文主要聚焦「遮挡」,用特定符号 (比如 X 或) 遮挡敏感数据,这种方法可以在脱敏的同时保持原有数据感观。原创 2023-11-05 06:21:43 · 1511 阅读 · 1 评论 -
Mysql:The server time zone value 'PDT' is unrecognized
java.sql.SQLException: The server time zone value ‘PDT’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuratio...原创 2019-05-05 18:03:31 · 2637 阅读 · 2 评论 -
pg_upgrade from 9.6升级到14.5
pg_upgrade(之前被称为pg_migrator) 允许存储在PostgreSQL数据文件中的数据被升级到一个较晚 的PostgreSQL主版本而无需进行主版本升级(例如从9.5.8到9.6.4或者从10.7到11.2)通常所需的数据转储/重载。 对于次版本升级(例如从9.6.2到9.6.3或者从10.1到10.2)则不需要这个程序。原创 2023-11-05 00:06:20 · 565 阅读 · 0 评论 -
MySQL HA:如何将“删库跑路”的损失降到最低
今天主要讲了两件事儿,一是如何备份和恢复数据库中的数据,确保数据安全;二是如何来实现数据库的高可用,避免宕机停服。虽然这是两个不同的问题,但你要知道,解决这两个问题背后的实现原理是一样的。高可用依赖的是数据复制,数据复制的本质就是从一个库备份数据,然后恢复到另外一个库中去。数据备份时,使用低频度的全量备份配合 Binlog 增量备份是一种常用而且非常实用的方法,使用这种备份方法,我们可以把数据库的数据精确地恢复到历史上任意一个时刻,不仅能解决数据损坏的问题,也不用怕误操作、删库跑路这些事儿了。原创 2023-07-21 14:07:40 · 155 阅读 · 0 评论 -
teradata 9794 File system has reported ERRAMPOUTOFPHYSPACE error
如果再次发生警报,DBA必须通过限制卷轴消耗会话或通过删除数据腾出空间来在AMP上腾出空间。ERR AMP OUT OF PHY SPACE =文件系统报告了AMP物理空间耗尽的错误。对任何正在添加空间的数据库/用户的请求都会导致错误,以避免在这些边界条件下的过度使用。如果这种情况频繁发生,则DBA必须开始执行容量规划,以处理额外的空间需求。数据库文件系统组件检测到物理磁盘空间接近允许的限制的情况。如果启用了DBQL日志记录,则可以在详细捕获时禁用或减少它。例如,如果RSS日志记录可能被禁用。原创 2023-06-13 00:13:34 · 516 阅读 · 0 评论 -
MongoDB 固定集合(Capped Collections)
MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。固定集合文档按照插入顺序储存的,默认情况下查询就是按照插入顺序返回的,也可以使用$natural调整返回顺序。是集合文档个数上线,单位是【个】原创 2023-06-12 00:24:14 · 1375 阅读 · 1 评论 -
Postgresql upgrade from version 9 to 14
Postgresql upgrade from version 9 to 14 , option A : Upgrading Data viapg_dumpall ; Option B : Upgrading Data viapg_upgrade原创 2023-06-11 23:37:55 · 1445 阅读 · 0 评论 -
postgresql行转列、列转行
postgresql列转行的思路主要是利用string_to_array。然后用unnest进行数组转换。行转列主要是用透视图crosstab相关函数。原创 2022-10-22 23:50:32 · 11122 阅读 · 1 评论 -
Redis精选问答
Redis精选热点问答:Redis底层数据结构SDS,Redis数据类型,Redis与分布式ID,Redis主从复制,Redis发布订阅与Stream,缓存穿透、缓存击穿、缓存雪崩。原创 2022-03-11 23:56:52 · 1623 阅读 · 0 评论 -
分库分表算法
假设目前有一个电商系统使用的是MySQL,要设计大数据量存储、高并发、高性能可扩展的方案,数据库中有用户表。用户会非常多,并且要实现高扩展性,应该怎么分库分表?1.Range范围 2.Hash哈希取模 3.一致性哈希原创 2022-03-26 23:20:52 · 3152 阅读 · 0 评论 -
pg_ctl: 目录 “/pgsql/data“不是一个数据库集群目录 | 致命错误: 角色 “postgres“ 不存在
运行pg_ctl start 提示不是一个数据库集群目录,以及致命错误:角色"postgres"不存在错误。原创 2022-02-05 23:55:58 · 6573 阅读 · 2 评论 -
mysql中给查询结果添加序号
前言手头有这么个需求,从一堆公司中排序选出中标单位最多的公司,并且给这些需要分数或者序列。解决方案使用变量@i=0进行设置,@i:=@i+1代表递增使用变量@i=100进行设置,@i:=@i-1代表递增(需要考虑0或者负数的情况)set @i=100;select (@i:=if(@i<1,0,@i-1)) as seq,x.* from (SELECT count(*) as number , t.bid_unit FROM unit twhere t.tag_industry原创 2021-08-17 00:13:43 · 1167 阅读 · 1 评论 -
postgreSQL数据库备份和恢复(pg_dump和pg_restore)
前言最近有个BRETT的任务,需要使用pg_dump和pg_restore来备份和恢复PROD的QLIK SENSE repository database ,目标版本postgress 9.6 (其实教程是通用的,无论9.6或者11 12 23).逻辑备份一般用pg_dump或者pg_dumpall–pg_dumpall将数据库集群全部逻辑转储到一个文件中。–pg_dump命令可以选择一个数据库或部分表进行备份。像我们的需求是备份指定的Qlik Sense QSR数据库而不需要LOG数据库,则选择原创 2021-06-14 11:52:30 · 5959 阅读 · 2 评论 -
Mysql Multiple-Column Indexes(Mysql多重索引)
前言复习的灵感来自某天不小心划过跳到了mysql官方文档中,发现官方文档中其实对于Multiple-Column Indexes 也就是多重索引 中有所提及。总结就是:mysql多列索引是顺序索引,倒序或者跳序都无效。。。假设有`index(a,b,c)`,也就是可以仅使用第一个`a`,或者`a+b`,或者`a+b+c`,使用'b'或者'b+c`或者'b+c+a'或者'c+b+a'都是无效的。原创 2021-01-17 00:51:23 · 897 阅读 · 0 评论 -
mysql: Data truncated for column ‘id‘ at row 1
前言今天在update数据的时候遇到了一个奇怪的错误,我从一些数据中select并create table到另一个表,然后执行双表update操作,然后就遇到一下问题:Caused by: java.sql.SQLException: Data truncated for column 'id' at row 1create table enterprise_import_tier2 as ( select REPLACE(GROUP_CONCAT(u.bid_enterprise,';'原创 2021-01-08 22:45:09 · 8579 阅读 · 0 评论 -
mysql截取字符串(SUBSTRING_INDEX)
前言手头有fix的任务,需要在mysql中,根据某个url截取部分字符串作为openId,url格式为xxxx.com/202012/t20201216_15360838.html,截取其中的t20201216_15360838出来作为openId,截取202012作为yyyy-mm的日期格式。解决方案1.mysql截取 / 和 . 中间的字符作为openIdSUBSTRING_INDEX(u.url,’/’,-1) 为根据 / 进行截取,获取后面的字符串SUBSTRING_INDEX(u.ur原创 2020-12-16 20:48:41 · 907 阅读 · 0 评论 -
mysql之关联删除(b表删除a表)
前言:除了上次的mysql关联更新之外,删除也可以是关联删除的。SQL实战:蹩脚的语句如下:delete unit_detail ud where ud.unit_id in (select x.unit_id from unit x where x.fix_flag=5;);改进版的关联删除语句:delete a from unit_detail as a inner join unit as b where a.unit_id=b.unit_id and b.fix_flag=5;原创 2020-11-27 00:33:47 · 1870 阅读 · 0 评论 -
mysql之关联更新(update join,用b表更新a表记录)
前言发现之前并没有整理过mysql表关联更新,这里补上。有时候我们需要用b表去更新a表的记录,如果只有一个字段那通常我们可能就update set a.xxx=(select b.xxx from b where a.ib.id) ,但是字段一多,显得就不是特别方便了,加上不好做限制,所以就了update join。解决思路主表CREATE TABLE `unit` ( `unit_id` int(11) NOT NULL AUTO_INCREMENT, `price` decimal(10原创 2020-11-19 14:02:54 · 38205 阅读 · 4 评论 -
Mysql移除重复记录实战
前言这是一次mysql移除重复记录实战,想起来之前并没有share过,所以整理一下发上来大家参考。假设有company表:company_name+price为判断重复条件,也就是 group by 并 having count(*)>1 的条件需要保留最大company_id(也就是移除最小company_id的记录)有些记录不止重复了一两条,可能上百条,多次执行移除重复记录,最后手工筛查过多重复的实战记录纯SQL,供参考。############################原创 2020-11-15 23:28:21 · 437 阅读 · 0 评论 -
MySql行转列实战(根据符号分割并分行展示)
前言最近有个爬虫系统,需要针对抓取下来的信息中的单位进行处理,而单位是通过分号连接的字符串,例如xxx公司;xxx公司。在mysql中根据符号;进行分割,并分行展示。解决方案其中title是信息标题,company是公司名称。(基于真实项目实战,字段做了处理)select t.title,t.company from xxx tSELECT a.title,SUBSTRING_INDEX( SUBSTRING_INDEX( a.company, ';', b.help_topic_i原创 2020-11-15 12:10:55 · 3374 阅读 · 0 评论 -
mysql中text和blob的长度
# text类型用来存储大量的文本数据,比较常见的类型。与Char、VarChat相比,text`不可以有默认值`。【一般普通文本建议用 `Text`,65K】【保存网页需要用到 `MediumText`,最大16M】# BLOB用于存储二进制数据,常常为图片或音频等大的对象。【建议使用`MediumBlob`16m起或者`LongBlob`4G,因为随便保存一个图片就超过65k了】原创 2020-10-23 00:39:52 · 2767 阅读 · 0 评论 -
如何重置pgsql的密码(Reset Forgotten Password For postgres User)
BackgroundHow should we do if forgot our postgres User password . For some reason, after installing PostgreSQL, you may forget the password of the postgres user. In this case, you need to know how to reset the password.如果忘记了我们的postgres用户密码,该怎么办。 由于某些原因,原创 2020-07-30 11:04:47 · 5385 阅读 · 0 评论 -
oracle知识整理(1) union和union all的区别,left join和right join的区别(各种join的区别)
union和union all的区别UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。UNION相当于真正的关联,会进行连接+排序+去重复UNION ALL相当于简单把结果连接起来,速度快UNION在进行表链接后将会按照字段的顺序进行排序,会筛选掉重复的记录,Union All不会去除重复记录,也不存在排序。所以从效率上说,...原创 2020-01-02 18:08:25 · 3612 阅读 · 0 评论 -
ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)
前言今天某项目的一个Repository的正常CRUD操作,发现报错信息ORA-1653:unable to extend table by 1024 in tablespace,什么意思呢,就是表空间已满,无法扩展.问题分析USERS表空间是默认用户表空间,在创建一个用户并没有指定此用户使用表空间时,该用户所有信息都会放入到users表空间中,如果有指定则一般是用户名相关的表空.--查看...原创 2019-10-23 14:13:00 · 9293 阅读 · 4 评论 -
空值判断,双表关联数据统计查询
SQL空值判断oracle的是NVL(value,nullvalue) pgsql的是COALESCE(value,nullvalue) mysql的是IFNULL(value,nullvalue)双表关联数据统计查询一个表是数据,一个表是项目 SELECT result2.facility_type_num, result2.facility_type_nam...原创 2018-07-06 12:04:38 · 2250 阅读 · 0 评论 -
mysql5.7之json格式与json_extract方法使用
数据初始化json_test表数据,id和jsonstr字段(类型json){&quot;no&quot;: &quot;7&quot;, &quot;title&quot;: &quot;运动方式&quot;, &quot;content&quot;: [{&quot;text&quot;: &原创 2018-07-12 15:19:30 · 31667 阅读 · 6 评论 -
PgSql之操作JSON类型字段
假设这里有check_result的表,我们需要从里面查询检查报告json字段checkresult这样是可以查询到数据的SELECT ID , checkresult :: json -> 'name' AS check_name, checkresult FROM check_result WHERE ( checkresu...原创 2018-06-01 14:11:52 · 9503 阅读 · 0 评论 -
MYSQL之查询Timestamp某个日期的数据
实战SQL语句 @Query(value = &quot; select * from event e &quot; + &quot; where (e.event_title like CONCAT('%',?1,'%') or ?1 is null) &quot; + &quot; and (to_days(e.register_time)=to_days(?2)原创 2018-06-13 16:58:37 · 19104 阅读 · 2 评论 -
Oracle中merge into的使用(代替Insert/Update)
merge into数据模板MERGE INTO table_name alias1 USING (table|view|sub_query) alias2ON (join condition) WHEN MATCHED THEN UPDATE table_name SET col1 = col_val1, col2 = col2_val ...原创 2018-05-30 16:51:32 · 4387 阅读 · 0 评论 -
oracle批量替换空格
空格产生的问题是多么的坑爹,明明select * from x where x.xxx=’xxxx’可以选择出来,偏偏那个值是’xxxx ‘导致查不出来。这个时候,需要批量替换空格update t_bd_material set fhelpcode=replace(fhelpcode,' ','');然后就ok了。...原创 2018-05-11 12:09:51 · 3435 阅读 · 0 评论 -
DBA锁库查询(Oracle)
通常我们会遇到oracle被一些进程堵死,有时候严重影响系统,那么这套脚本可以查询出问题,给出建议,并且给出可以终结进程的命令select s.inst_id, s.sid, s.machine, s.username, s.osuser, s.schemaname, o.object_name, ...原创 2018-04-10 11:54:58 · 4278 阅读 · 0 评论 -
Oracle表分区详解
什么是表分区当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高...原创 2018-08-14 11:40:54 · 329 阅读 · 0 评论 -
create table select from 和 insert into table select from区别
create table select from 和 insert into table select from都是用来复制表,两者的主要区别为:create table select from 要求目标表不存在,因为在插入时会自动创建。insert into table select from 要求目标表存在,相当于复制插入。备份表数据: create table tmp_arti...原创 2018-10-06 18:50:54 · 34170 阅读 · 1 评论 -
mysql自动生成订单号(固定+时间+随机数)
SELECT CONCAT( 'SD', DATE_FORMAT(now(), '%Y%m%d%H%i%s'), lpad(round(round(rand(),4)*1000),4,'0') ) from dual;原创 2018-09-30 11:24:06 · 6871 阅读 · 0 评论 -
mysql查询当前日期的一个月内的数据
背景有时候我们写sql查询一些东西,需要限定时间是一个月内的数据,这时候就可以使用这个语句了。实战一个月到未来的活动数据SELECT * from activity_info t where t.valid='Y' and t.act_date > (SELECT DATE_ADD(now(),INTERVAL -1 MONTH));一个月内到此刻的活动数据SELECT * f...原创 2018-10-22 16:21:33 · 10597 阅读 · 0 评论