一个优化的SQL:
SELECT order_date,
order_source,
SUM(commodity_num) num,
SUM(actual_charge) charge
FROM (
SELECT to_char(oc.create_date, 'yyyyMMdd') AS order_date,
(CASE
WHEN oo.event_type = 'ONLINE_COMMODITY_ORDER' THEN
'线上'
ELSE
'线下'
END) order_source,
oc.commodity_num,
oc.actual_charge actual_charge
FROM ord.ord_commodity_hb_2017 AS oc, ord.ord_order_hb_2017 AS oo
WHERE oc.order_id = oo.order_id
AND oc.op_type = 3 -- 3个值 ,3->5000 大概1/20的数据
AND oc.create_date BETWEEN '2017-02-05' AND '2017-12-07' -- 无用
AND oc.corp_org_id = 106 -- 无用
AND oo.trade_state = 11 -- 3个值 11 --> 71万行,一半数据
AND oo.event_type IN (values('ONLINE_COMMODITY_ORDER'),
('USER_CANCEL'),
('USER_COMMODITY_UPDATE')) -- 大概1/10 数据
ORDER BY oc.create_date -- 如果业务不强制,最好去掉排序,如果不能去掉,最好等过滤数据量到尽量小时再排序
) T
GROUP BY order_date, order_source;
下面默认以postgresql为例:
一、排序:
1. 尽量避免
2. 排序的数据量尽量少,并保证在内存里完成排序。
(至于具体什么数据量能在内存中完成排序,不同数据库有不同的配置:
oracle是sort_area_size;
postgresql是work_mem (integer),单位是KB,默认值是4MB。
mysql是sort_buffer_size 注意:该参数对应的分配内存是每连接独占!
)
二、索引:
1. 过滤的数据量比较少,一般来说<20%,应该走索引。20%-40% 可能走索引也可能不走索引。> 40% ,基本不走索引(会全表扫描)
2. 保证值的数据类型和字段数据类型要一直。
3. 对索引的字段进行计算时,必须在运算符右侧进行计算。也就是 to_char(oc.create_date, 'yyyyMMdd')是没用的
4. 表字段之间关联,尽量给相关字段上添加索引。
5. 复合索引,遵从最左前缀的原则,即最左优先。(单独右侧字段查询没有索引的)
三、连接查询方式:
1、hash join
放内存里进行关联。
适用于结果集比较大的情况。
比如都是200000数据
2、nest loop
从结果1 逐行取出,然后与结果集2进行匹配。
适用于两个结果集,其中一个数据量远大于另外一个时。
结果集一:1000
结果集二:1000000
四、多表联查时:
在多表联查时,需要考虑连接顺序问题。
1、当postgresql中进行查询时,如果多表是通过逗号,而不是join连接,那么连接顺序是多表的笛卡尔积中取最优的。如果有太多输入的表, PostgreSQL规划器将从穷举搜索切换为基因概率搜索,以减少可能性数目(样本空间)。基因搜索花的时间少, 但是并不一定能找到最好的规划。
2、对于JOIN,
LEFT JOIN / RIGHT JOIN 会一定程度上指定连接顺序,但是还是会在某种程度上重新排列:
FULL JOIN 完全强制连接顺序。
如果要强制规划器遵循准确的JOIN连接顺序,我们可以把运行时参数join_collapse_limit设置为 1
五、PostgreSQL提供了一些性能调优的功能:
优化思路:
0、为每个表执行 ANALYZE
。然后分析 EXPLAIN (ANALYZE,BUFFERS) sql。
1、对于多表查询,查看每张表数据,然后改进连接顺序。
2、先查找那部分是重点语句,比如上面SQL,外面的嵌套层对于优化来说没有意义,可以去掉。
3、查看语句中,where等条件子句,每个字段能过滤的效率。找出可优化处。
比如oc.order_id = oo.order_id是关联条件,需要加索引
oc.op_type = 3 能过滤出1/20的数据,
oo.event_type IN (...) 能过滤出1/10的数据,
这两个是优化的重点,也就是实现确保op_type与event_type已经加了索引,其次确保索引用到了。
优化方案:
a) 整体优化:
1、使用EXPLAIN
EXPLAIN命令可以查看执行计划,这个方法是我们最主要的调试工具。
2、及时更新执行计划中使用的统计信息
由于统计信息不是每次操作数据库都进行更新的,一般是在 VACUUM 、 ANALYZE 、 CREATE INDEX等DDL执行的时候会更新统计信息,
因此执行计划所用的统计信息很有可能比较旧。 这样执行计划的分析结果可能误差会变大。
以下是表tenk1的相关的一部分统计信息。
SELECT relname, relkind, reltuples, relpages
FROM pg_class
WHERE relname LIKE 'tenk1%';
relname | relkind | reltuples | relpages
----------------------+---------+-----------+----------
tenk1 | r | 10000 | 358
tenk1_hundred | i | 10000 | 30
tenk1_thous_tenthous | i | 10000 | 30
tenk1_unique1 | i | 10000 | 30
tenk1_unique2 | i | 10000 | 30
(5 rows)
其中 relkind是类型,r是自身表,i是索引index;reltuples是项目数;relpages是所占硬盘的块数。
估计成本通过 (磁盘页面读取【relpages】*seq_page_cost)+(行扫描【reltuples】*cpu_tuple_cost)计算。
默认情况下, seq_page_cost是1.0,cpu_tuple_cost是0.01。
名字
类型
描述
relpages
int4
以页(大小为BLCKSZ)的此表在磁盘上的形式的大小。 它只是规划器用的一个近似值,是由VACUUM,ANALYZE 和几个 DDL 命令,比如CREATE INDEX更新。
reltuples
float4
表中行的数目。只是规划器使用的一个估计值,由VACUUM,ANALYZE 和几个 DDL 命令,比如CREATE INDEX更新。
3、使用临时表(with)
对于数据量大,且无法有效优化时,可以使用临时表来过滤数据,降低数据数量级。
4、对于会影响结果的分析,可以使用 begin;...rollback;来回滚。
b) 查询优化:
1、明确用join来关联表,确保连接顺序
一般写法:SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
如果明确用join的话,执行时候执行计划相对容易控制一些。
例子:
SELECT * FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id;
SELECT * FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
c) 插入更新优化
1、关闭自动提交(autocommit=false)
如果有多条数据库插入或更新等,最好关闭自动提交,这样能提高效率
2、多次插入数据用copy命令更高效
我们有的处理中要对同一张表执行很多次insert操作。这个时候我们用copy命令更有效率。因为insert一次,其相关的index都要做一次,比较花费时间。
3、临时删除index【具体可以查看Navicat表数据生成sql的语句,就是先删再建的】
有时候我们在备份和重新导入数据的时候,如果数据量很大的话,要好几个小时才能完成。这个时候可以先把index删除掉。导入后再建index。
4、外键关联的删除
如果表的有外键的话,每次操作都没去check外键整合性。因此比较慢。数据导入后再建立外键也是一种选择。
d) 修改参数:
选项
默认值
说明
是否优化
原因
max_connections
100
允许客户端连接的最大数目
否
因为在测试的过程中,100个连接已经足够
fsync
on
强制把数据同步更新到磁盘
是
因为系统的IO压力很大,为了更好的测试其他配置的影响,把改参数改为off
shared_buffers
24MB
决定有多少内存可以被PostgreSQL用于缓存数据(推荐内存的1/4)
是
在IO压力很大的情况下,提高该值可以减少IO
work_mem
1MB
使内部排序和一些复杂的查询都在这个buffer中完成
是
有助提高排序等操作的速度,并且减低IO
effective_cache_size
128MB
优化器假设一个查询可以用的最大内存,和shared_buffers无关(推荐内存的1/2)
是
设置稍大,优化器更倾向使用索引扫描而不是顺序扫描
maintenance_work_mem
16MB
这里定义的内存只是被VACUUM等耗费资源较多的命令调用时使用
是
把该值调大,能加快命令的执行
wal_buffer
768kB
日志缓存区的大小
是
可以降低IO,如果遇上比较多的并发短事务,应该和commit_delay一起用
checkpoint_segments
3
设置wal log的最大数量数(一个log的大小为16M)
是
默认的48M的缓存是一个严重的瓶颈,基本上都要设置为10以上
checkpoint_completion_target
0.5
表示checkpoint的完成时间要在两个checkpoint间隔时间的N%内完成
是
能降低平均写入的开销
commit_delay
0
事务提交后,日志写到wal log上到wal_buffer写入到磁盘的时间间隔。需要配合commit_sibling
是
能够一次写入多个事务,减少IO,提高性能
commit_siblings
5
设置触发commit_delay的并发事务数,根据并发事务多少来配置
是
减少IO,提高性能
autovacuum_naptime
1min
下一次vacuum任务的时间
是
提高这个间隔时间,使他不是太频繁
autovacuum_analyze_threshold
50
与autovacuum_analyze_scale_factor配合使用,来决定是否analyze
是
使analyze的频率符合实际
autovacuum_analyze_scale_factor
0.1
当update,insert,delete的tuples数量超过autovacuum_analyze_scale_factor*table_size+autovacuum_analyze_threshold时,进行analyze。
是
使analyze的频率符合实际
下面介绍几个我认为重要的:
1、增加maintenance_work_mem参数大小
增加这个参数可以提升CREATE INDEX和ALTER TABLE ADD FOREIGN KEY的执行效率。
2、增加checkpoint_segments参数的大小
增加这个参数可以提升大量数据导入时候的速度。
3、设置archive_mode无效
这个参数设置为无效的时候,能够提升以下的操作的速度
・CREATE TABLE AS SELECT
・CREATE INDEX
・ALTER TABLE SET TABLESPACE
・CLUSTER等。
4、autovacuum相关参数
autovacuum :默认为on,表示是否开起autovacuum。默认开起。特别的,当需要冻结xid时,尽管此值为off,PG也会进行vacuum。
autovacuum_naptime :下一次vacuum的时间,默认1min。 这个naptime会被vacuum launcher分配到每个DB上。autovacuum_naptime/num of db。
log_autovacuum_min_duration:记录autovacuum动作到日志文件,当vacuum动作超过此值时。 “-1”表示不记录。“0”表示每次都记录。
autovacuum_max_workers :最大同时运行的worker数量,不包含launcher本身。
autovacuum_work_mem :每个worker可使用的最大内存数。
autovacuum_vacuum_threshold :默认50。与autovacuum_vacuum_scale_factor配合使用, autovacuum_vacuum_scale_factor默认值为20%。当update,delete的tuples数量超过autovacuum_vacuum_scale_factor*table_size+autovacuum_vacuum_threshold时,进行vacuum。如果要使vacuum工作勤奋点,则将此值改小。
autovacuum_analyze_threshold :默认50。与autovacuum_analyze_scale_factor配合使用。
autovacuum_analyze_scale_factor : 默认10%。当update,insert,delete的tuples数量超过autovacuum_analyze_scale_factor*table_size+autovacuum_analyze_threshold时,进行analyze。
autovacuum_freeze_max_age :200 million。离下一次进行xid冻结的最大事务数。
autovacuum_multixact_freeze_max_age :400 million。离下一次进行xid冻结的最大事务数。
autovacuum_vacuum_cost_delay :如果为-1,取vacuum_cost_delay值。
autovacuum_vacuum_cost_limit :如果为-1,到vacuum_cost_limit的值,这个值是所有worker的累加值。
你可能感兴趣的:(PostgreSQL,postgresql)
mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
知识分享小能手
大数据 数据库 MySQL mysql 学习 oracle 数据库 开发语言 adb 大数据
1、TOP和MySQLLIMIT子句内容在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP关键字主要用于SQLServer和Access数据库中,而LIMIT子句则主要用于MySQL、PostgreSQL(通过LIMIT/OFFSET语法)、SQLite等数据库中。下面将分别详细介绍这两个功能的语法、语句以及案例。1.1、TOP子句(SQLServer和Access)1.1
MySQl篇(SQL - 基本介绍)(持续更新迭代)
wclass-zhengge
mysql sql 数据库
目录一、简介二、SQL方言(分页查询为例)1.简介2.SQL方言大比拼2.1.Oracle2.1.1.使用ROWNUM实现分页查询2.1.2.使用ROW_NUMBER()实现分页查询2.2.MySQL2.3.PostgreSQL三、语法规范四、注释五、MySQL脚本中的标点符号一、简介1、SQL是结构化查询语言(StructureQueryLanguage),专门用来操作/访问关系型数据库的通用语
梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器
鲁鲁517
梧桐数据库 梧桐数据库
以下是一些常见的数据库优化器:1.CBO(Cost-BasedOptimizer)应用场景:广泛应用于关系型数据库中,如Oracle、PostgreSQL、MySQL等。工作原理:通过计算不同执行计划的代价(如CPU、I/O等资源消耗),选择最低代价的执行计划。代表数据库:Oracle、PostgreSQL、MySQL。特点:CBO使用统计信息(如表大小、索引分布)来评估查询的代价。2.RBO(R
navicate远程linux上的pgsql提示密码失败
coding上下求索
linux 服务器 数据库
错误提示:FATAL:passwordauthenticationfailedforuser“postgres”解决方案:1、pg_hba.conf文件中,ipv4下面的内容改成hostallall0.0.0.0/0md52、postgresql.conf文件中,修改listen_addresses由#listen_addresses='location'改为listen_addresses='*
PostgreSQL | 生成UUID 报错:HINT: No function matches the given name and argument types
慌途L
PostgreSQL postgresql uuid uuid_generate gen_random_uuid
在PG数据库上新建表结构:CREATETABLE"public"."t_test"("guid"uuidNOTNULLDEFAULTuuid_generate_v4(),"data"jsonb,"create_time"timestamptz(6)DEFAULTnow(),CONSTRAINT"test_pkey"PRIMARYKEY("guid"));报错:ERROR:functionuuid_
解决 PostgreSQL的uuid_generate_v4() 不存在异常
这是然少
PostgreSQL postgresql 数据库
详细的异常信息如下所示:>错误:函数uuid_generate_v4()不存在导致这个问题的原因就是,uuid_generate_v4()这个uuid函数默认的是在Postgresql扩展中的,数据库迁移后,extension扩展就没有了,需要重新安装。有3种方法可以让PostgreSQL数据库支持uuid_generate_v4()或uuid_generate_v1()函数。方案一安装uuid-
openGauss 扩展FDW与其他openGauss特性
openGaussMan
数据库 openGauss
扩展FDW与其他openGauss特性openGauss基于PostgreSQL,而PostgreSQL没有内置存储引擎适配器,如MySQL的handlerton。为了使MOT存储引擎能够集成到openGauss中,我们利用并扩展了现有的FDW机制。随着FDW引入PostgreSQL9.1,现在可以将这些外表和数据源呈现为统一、本地可访问的关系来访问外部管理的数据库。和PostgreSQL不同的是
PostgreSQL 与 MySQL:如何为你的项目选择合适的数据库?
陌北v1
数据库 postgresql mysql
在现代应用开发中,选择合适的数据库是影响项目成败的关键决策之一。PostgreSQL和MySQL是两种广泛使用的开源数据库,每种数据库都有其独特的优势和适用场景。本文将深入对比这两者的核心特性,帮助开发者理解在何种情况下现在适合的数据库。1.架构与标准支持PostgreSQL:被称为“最先进的开源数据库”,高度遵循SQL标准,支持更复杂的查询、子查询、窗口函数、递归查询等功能。提供全面的ACID(
一条sql是如何执行的详解
听忆.
轻松拿捏【面试干货】 sql 数据库
一条sql是如何执行的详解1.SQL解析(Parsing)2.查询重写(QueryRewrite)3.查询规划(QueryPlanning)4.查询执行(QueryExecution)5.结果返回示例:查询执行流程总结边走、边悟迟早会好一条SQL查询在PostgreSQL(以及大多数关系型数据库)中的执行过程可以分为多个阶段。每个阶段都对应特定的任务,从SQL解析到最终获取查询结果。以下是SQL查
postgresql 查看索引是否有效及索引使用情况
majinbo111
postgreSQL postgresql 查看索引 建立索引是否有效
查看索引是否有效1.未使用索引前jinbo=#explainanalyzeselect*fromjinbo.studentwherescoreBitmapIndexScanonstudent_score_sex_idx(cost=0.00..4.40rows=2width=0)(actualtime=0.058..0.058rows=1loops=1)IndexCond:((scoreALL(AR
从零开始学PostgreSQL (十三):并行查询
DBA实战
postgresql 数据库
目录概述1.并行查询的工作原理2.什么时候可以使用并行查询?3.并行计划3.1.并行扫描3.2.并行连接3.3.并行聚合3.4.并行追加3.5.并行计划提示4.并行安全4.1.函数和聚合的并行标签5.注意事项6.总结概述并行查询是PostgreSQL提供的一种功能,它允许查询在多个CPU核心或处理器上同时执行,从而显著提高查询性能,特别是在处理大型数据集时。并行查询的设计目标是在多核处理器的现代硬
PostgreSQL进阶教程
爱分享的码瑞哥
postgresql
PostgreSQL进阶教程目录事务和并发控制事务事务隔离级别锁高级查询联合查询窗口函数子查询CTE(公用表表达式)数据类型自定义数据类型数组JSON高级索引部分索引表达式索引GIN和GiST索引性能调优查询优化配置优化备份与恢复物理备份逻辑备份扩展与插件PostGISpg_cron集群与高可用StreamingReplicationPatroni事务和并发控制事务事务是一个或多个SQL语句的组合
微服务开发实战(七)
禅大师
PostgreSQL下载安装在程序开发中,需要使用到数据库。目前.NETCore支持MSSQLServer,MySQL,PostgreSQL,Oracle等多种数据库。在本教程中,使用的是免费开源、跨平台、功能完善、性能强大的PostgreSQL数据库。可以直接访问官方网站https://www.postgresql.org/下载安装,或者从第三方网站https://www.openscg.com
数据库管理的利器Navicat —— 全面测评与热门产品推荐
界面开发小八哥
数据库 Navicat 数据库开发 sql mysql
在数据库管理领域,Navicat无疑是一款深受欢迎的软件。作为一个强大的数据库管理和开发工具,它支持多种数据库类型,包括MySQL、MariaDB、MongoDB、SQLServer、Oracle、PostgreSQL等。本文将全面测评Navicat的核心功能,同时推荐几款热门的Navicat产品。Navicat的主要特点1.跨平台支持:Navicat支持Windows、Mac和Linux平台,可
通过DBeaver连接Phoenix操作hbase
不想做咸鱼的王富贵
通过DBeaver连接Phoenix操作hbase前言本文介绍常用一种通用数据库工具Dbeaver,DBeaver可通过JDBC连接到数据库,可以支持几乎所有的数据库产品,包括:MySQL、PostgreSQL、MariaDB、SQLite、Oracle、Db2、SQLServer、Sybase、MSAccess、Teradata、Firebird、Derby等等。商业版本更是可以支持各种NoSQ
【Go】-基于Gin和GORM的小清单项目
knoci
Go语言学习 golang gin 开发语言
目录项目介绍简介技术项目结构项目分析总结项目介绍简介项目地址:knoci/list:基于Gin的待办清单小项目(github.com)一个仿照github/Q1mi/bubble做的一个gin框架练习技术gin框架gorm操作PostgreSQLini配置文件项目结构list├──README.md├──config│└──config.ini├──controller│└──controller
一种跨平台获取程序名称的方法
shulu
C项目 c语言
一种跨平台获取程序名称的方法代码来自于postgresql#include#include#include#include/**is_absolute_path**Bymakingthisamacroweavoidneedingtoincludepath.cinlibpq.*/#ifndefWIN32#defineIS_DIR_SEP(ch)((ch)=='/')#defineis_absolut
PostgreSQL 性能优化全方位指南:深度提升数据库效率
Koishi_TvT
数据库 postgresql 性能优化 github
PostgreSQL性能优化全方位指南:深度提升数据库效率别忘了请点个赞+收藏+关注支持一下博主喵!!!在现代互联网应用中,数据库性能优化是系统优化中至关重要的一环,尤其对于数据密集型和高并发的应用而言,PostgreSQL(以下简称PG)凭借其丰富的特性和强大的功能,成为很多企业的首选。然而,随着数据规模的扩展和查询复杂度的提升,PostgreSQL的性能问题逐渐显现。本文将详细介绍Postgr
JDBC使用及源码编译
openGauss小助手
openGauss技术分享 数据库 database
1.JDBC简介JDBC是JavaDataBaseConnectivity的缩写,它是Java程序访问数据库的标准接口。JDBC接口是Java标准库自带的,具体的JDBC驱动是由数据库厂商提供的,JDBC驱动也是由Java语言编写的,为一个jar包,真正实现JDBC接口中的类。openGauss数据库源自postgres,openGaussJDBC以PostgreSQLJDBCDriver42.2
pg13.x主从节点搭建以及数据同步
亦诗亦诗
postgresql
步骤1:安装postgres可参考:centosarm安装Postgres此处我搭建了2台postgres,分别为:10.211.110.55、10.211.110.56步骤2:主库配置比如在PostgreSQL中实现一主一从的集群模式,此处选定10.211.110.55为主节点,另一个为从节点,可以使用流复制(StreamingReplication)来实现主节点数据实时同步到从节点。以下是一般
leetcode 1651 Hopper公司查询3(postgresql)
奋斗哼哼
leetcode postgresql 算法 数据库 sql
需求Table:Drivers±------------±--------+|ColumnName|Type|±------------±--------+|driver_id|int||join_date|date|±------------±--------+driver_id是该表的主键。该表的每一行均包含驾驶员的ID以及他们加入Hopper公司的日期。Table:Rides±-------
leetcode 1811 寻找面试候选人(postgresql)
奋斗哼哼
leetcode 面试 postgresql 数据库 sql
需求表:Contests±-------------±-----+|ColumnName|Type|±-------------±-----+|contest_id|int||gold_medal|int||silver_medal|int||bronze_medal|int|±-------------±-----+contest_id是该表的主键.该表包含LeetCode竞赛的ID和该场比赛中
Linux 上安装 PostgreSQL
lly202406
开发语言
Linux上安装PostgreSQLPostgreSQL是一款功能强大的开源关系数据库管理系统,因其稳定性、可扩展性和先进的功能而广受欢迎。在Linux系统上安装PostgreSQL是一个相对直接的过程,但具体步骤可能会因您使用的Linux发行版而异。本文将介绍在几种流行的Linux发行版上安装PostgreSQL的方法。在Ubuntu上安装PostgreSQLUbuntu是最流行的Linux发行
阿里云“99计划”是什么?“99计划”有哪些特惠云产品?价格是多少?
阿里云最新优惠和活动汇总
2024年,阿里云推出了“99计划”,该计划是阿里云为了助力中小企业无忧上云而推出的特惠活动,“99计划”为初创企业准备的上云首选必备产品,让客户享受技术红利,长期普惠上云,新老同享,续费同价。包含的云产品有云服务器e实例和u1实例、对象存储OSS、NAS文件存储、阿里云盘企业版CDE、SLS日志服务、云数据库RDSMySQL版、云数据库RDSPostgreSQL版、云数据库RDSSQLServe
PostgreSQL 数组类型使用详解
捞起月亮的渔民丁
postgresql 数据库
PostgreSQL数组类型使用详解PostgreSQL数组类型使用详解可能大家对PostgreSQL这个关系型数据库不太熟悉,因为大部分人最熟悉的,公司用的最多的是MySQL我们先对PostgreSQL数据库(下面简称PG)简单的介绍一下,以后有机会,再单独写一篇专门介绍pgSql的文章TheWorld’sMostAdvancedOpenSourceRelationalDatabase这是PG官
在PostgreSQL中使用JSONB对象数组
weixin_26750481
java python
数据库提示(DatabaseTips)Inmylastarticle,wefocusedonturningaPostgreSQLjsonbcolumn,thatcontainedanArrayofObjects,intoarecordset,sothatitcouldbequeriedinarelationalmanner.在我的上一篇文章中,我们专注于将包含对象数组的PostgreSQLjson
postgresql 判断数据是否存在,存在更新,不存在则插入
llc的足迹
数据库 postgresql
INSERTINTOtable_name(create_time,update_time,name,latest_time)VALUES(NOW(),NOW(),'name''2023-04-2519:05:50')ONCONFLICT(name)DOUPDATESETupdate_time=NOW(),target_name='name',latest_time='2023-04-2519:05
Postgresql 删除数组中的元素
llc的足迹
数据库 postgresql 数据库
extra为{“a”:[null,3,null],“b”:111}使用sql将extra中a中的null移除第一步:首先先把[null,3,null]移除,selectjson_agg(elem)filter(whereelem!='null')from(selectjsonb_array_elements('[null,3,null]'::jsonb)aselem)t;这将得到[3]jsonb_
使用java代码实现操作数据库的创建等系列操作
两点王爷
数据库 java oracle
创作背景:使用代码实现对PostgreSQL数据库的创建用户、授权用户、删除用户系列操作!1、导入相关的依赖org.projectlomboklombokcn.hutoolhutool-all5.8.262、具体实现创建实体类@Data@ApiModel(value="EntityDataBase",description="实体数据库相关内容")publicclassEntityDataBase
SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件
暗雪之格
Spring spring boot 数据库 jar java-ee
SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件H2是一个用Java开发的嵌入式数据库,它的主要特性使其成为嵌入式应用程序的理想选择。H2仅是一个类库,可以直接嵌入到应用项目中,而无需独立安装客户端和服务器端。常用开源数据库常用的开源数据库包括H2、Derby、HSQLDB、MySQL和PostgreSQL。相比之下,H2和HSQLDB非常适合作为嵌入式数据库使用,而其他数
Java实现的简单双向Map,支持重复Value
superlxw1234
java 双向map
关键字:Java双向Map、DualHashBidiMap
有个需求,需要根据即时修改Map结构中的Value值,比如,将Map中所有value=V1的记录改成value=V2,key保持不变。
数据量比较大,遍历Map性能太差,这就需要根据Value先找到Key,然后去修改。
即:既要根据Key找Value,又要根据Value
PL/SQL触发器基础及例子
百合不是茶
oracle数据库 触发器 PL/SQL编程
触发器的简介;
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。触发器和过程函数类似 过程函数必须要调用,
一个表中最多只能有12个触发器类型的,触发器和过程函数相似 触发器不需要调用直接执行,
触发时间:指明触发器何时执行,该值可取:
before:表示在数据库动作之前触发
[时空与探索]穿越时空的一些问题
comsci
问题
我们还没有进行过任何数学形式上的证明,仅仅是一个猜想.....
这个猜想就是; 任何有质量的物体(哪怕只有一微克)都不可能穿越时空,该物体强行穿越时空的时候,物体的质量会与时空粒子产生反应,物体会变成暗物质,也就是说,任何物体穿越时空会变成暗物质..(暗物质就我的理
easy ui datagrid上移下移一行
商人shang
js 上移下移 easyui datagrid
/**
* 向上移动一行
*
* @param dg
* @param row
*/
function moveupRow(dg, row) {
var datagrid = $(dg);
var index = datagrid.datagrid("getRowIndex", row);
if (isFirstRow(dg, row)) {
Java反射
oloz
反射
本人菜鸟,今天恰好有时间,写写博客,总结复习一下java反射方面的知识,欢迎大家探讨交流学习指教
首先看看java中的Class
package demo;
public class ClassTest {
/*先了解java中的Class*/
public static void main(String[] args) {
//任何一个类都
springMVC 使用JSR-303 Validation验证
杨白白
spring mvc
JSR-303是一个数据验证的规范,但是spring并没有对其进行实现,Hibernate Validator是实现了这一规范的,通过此这个实现来讲SpringMVC对JSR-303的支持。
JSR-303的校验是基于注解的,首先要把这些注解标记在需要验证的实体类的属性上或是其对应的get方法上。
登录需要验证类
public class Login {
@NotEmpty
log4j
香水浓
log4j
log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, HTML, DATABASE
#log4j.rootCategory=DEBUG, STDOUT, DAILYFILE, ROLLINGFILE, HTML
#console
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4
使用ajax和history.pushState无刷新改变页面URL
agevs
jquery 框架 Ajax html5 chrome
表现
如果你使用chrome或者firefox等浏览器访问本博客、github.com、plus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器前进和后退。
是什么有这么强大的功能呢?
HTML5里引用了新的API,history.pushState和history.replaceState,就是通过
centos中文乱码
AILIKES
centos OS ssh
一、CentOS系统访问 g.cn ,发现中文乱码。
于是用以前的方式:yum -y install fonts-chinese
CentOS系统安装后,还是不能显示中文字体。我使用 gedit 编辑源码,其中文注释也为乱码。
后来,终于找到以下方法可以解决,需要两个中文支持的包:
fonts-chinese-3.02-12.
触发器
baalwolf
触发器
触发器(trigger):监视某种情况,并触发某种操作。
触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
语法:
create trigger triggerName
after/before 
JS正则表达式的i m g
bijian1013
JavaScript 正则表达式
g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。 i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写。 m:表示
HTML5模式和Hashbang模式
bijian1013
JavaScript AngularJS Hashbang模式 HTML5模式
我们可以用$locationProvider来配置$location服务(可以采用注入的方式,就像AngularJS中其他所有东西一样)。这里provider的两个参数很有意思,介绍如下。
html5Mode
一个布尔值,标识$location服务是否运行在HTML5模式下。
ha
[Maven学习笔记六]Maven生命周期
bit1129
maven
从mvn test的输出开始说起
当我们在user-core中执行mvn test时,执行的输出如下:
/software/devsoftware/jdk1.7.0_55/bin/java -Dmaven.home=/software/devsoftware/apache-maven-3.2.1 -Dclassworlds.conf=/software/devs
【Hadoop七】基于Yarn的Hadoop Map Reduce容错
bit1129
hadoop
运行于Yarn的Map Reduce作业,可能发生失败的点包括
Task Failure
Application Master Failure
Node Manager Failure
Resource Manager Failure
1. Task Failure
任务执行过程中产生的异常和JVM的意外终止会汇报给Application Master。僵死的任务也会被A
记一次数据推送的异常解决端口解决
ronin47
记一次数据推送的异常解决
需求:从db获取数据然后推送到B
程序开发完成,上jboss,刚开始报了很多错,逐一解决,可最后显示连接不到数据库。机房的同事说可以ping 通。
自已画了个图,逐一排除,把linux 防火墙 和 setenforce 设置最低。
service iptables stop
巧用视错觉-UI更有趣
brotherlamp
UI ui视频 ui教程 ui自学 ui资料
我们每个人在生活中都曾感受过视错觉(optical illusion)的魅力。
视错觉现象是双眼跟我们开的一个玩笑,而我们往往还心甘情愿地接受我们看到的假象。其实不止如此,视觉错现象的背后还有一个重要的科学原理——格式塔原理。
格式塔原理解释了人们如何以视觉方式感觉物体,以及图像的结构,视角,大小等要素是如何影响我们的视觉的。
在下面这篇文章中,我们首先会简单介绍一下格式塔原理中的基本概念,
线段树-poj1177-N个矩形求边长(离散化+扫描线)
bylijinnan
数据结构 算法 线段树
package com.ljn.base;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* POJ 1177 (线段树+离散化+扫描线),题目链接为http://poj.org/problem?id=1177
HTTP协议详解
chicony
http协议
引言
Scala设计模式
chenchao051
设计模式 scala
Scala设计模式
我的话: 在国外网站上看到一篇文章,里面详细描述了很多设计模式,并且用Java及Scala两种语言描述,清晰的让我们看到各种常规的设计模式,在Scala中是如何在语言特性层面直接支持的。基于文章很nice,我利用今天的空闲时间将其翻译,希望大家能一起学习,讨论。翻译
安装mysql
daizj
mysql 安装
安装mysql
(1)删除linux上已经安装的mysql相关库信息。rpm -e xxxxxxx --nodeps (强制删除)
执行命令rpm -qa |grep mysql 检查是否删除干净
(2)执行命令 rpm -i MySQL-server-5.5.31-2.el
HTTP状态码大全
dcj3sjt126com
http状态码
完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b3Iub3JnLw%3D%3D在线查阅。HTTP 1.1的状态码被标记为新特性,因为许多浏览器只支持 HTTP 1.0。你应只把状态码发送给支持 HTTP 1.1的客户端,支持协议版本可以通过调用request
asihttprequest上传图片
dcj3sjt126com
ASIHTTPRequest
NSURL *url =@"yourURL";
ASIFormDataRequest*currentRequest =[ASIFormDataRequest requestWithURL:url];
[currentRequest setPostFormat:ASIMultipartFormDataPostFormat];[currentRequest se
C语言中,关键字static的作用
e200702084
C++ c C#
在C语言中,关键字static有三个明显的作用:
1)在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。
一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访
win7/8使用curl
geeksun
win7
1. WIN7/8下要使用curl,需要下载curl-7.20.0-win64-ssl-sspi.zip和Win64OpenSSL_Light-1_0_2d.exe。 下载地址:
http://curl.haxx.se/download.html 请选择不带SSL的版本,否则还需要安装SSL的支持包 2. 可以给Windows增加c
Creating a Shared Repository; Users Sharing The Repository
hongtoushizi
git
转载自:
http://www.gitguys.com/topics/creating-a-shared-repository-users-sharing-the-repository/ Commands discussed in this section:
git init –bare
git clone
git remote
git pull
git p
Java实现字符串反转的8种或9种方法
Josh_Persistence
异或反转 递归反转 二分交换反转 java字符串反转 栈反转
注:对于第7种使用异或的方式来实现字符串的反转,如果不太看得明白的,可以参照另一篇博客:
http://josh-persistence.iteye.com/blog/2205768
/**
*
*/
package com.wsheng.aggregator.algorithm.string;
import java.util.Stack;
/**
代码实现任意容量倒水问题
home198979
PHP 算法 倒水
形象化设计模式实战 HELLO!架构 redis命令源码解析
倒水问题:有两个杯子,一个A升,一个B升,水有无限多,现要求利用这两杯子装C
Druid datasource
zhb8015
druid
推荐大家使用数据库连接池 DruidDataSource. http://code.alibabatech.com/wiki/display/Druid/DruidDataSource DruidDataSource经过阿里巴巴数百个应用一年多生产环境运行验证,稳定可靠。 它最重要的特点是:监控、扩展和性能。 下载和Maven配置看这里: http
两种启动监听器ApplicationListener和ServletContextListener
spjich
java spring 框架
引言:有时候需要在项目初始化的时候进行一系列工作,比如初始化一个线程池,初始化配置文件,初始化缓存等等,这时候就需要用到启动监听器,下面分别介绍一下两种常用的项目启动监听器
ServletContextListener
特点: 依赖于sevlet容器,需要配置web.xml
使用方法:
public class StartListener implements
JavaScript Rounding Methods of the Math object
何不笑
JavaScript Math
The next group of methods has to do with rounding decimal values into integers. Three methods — Math.ceil(), Math.floor(), and Math.round() — handle rounding in differen