whoru

学习、分享、交流、沉淀

由于前一段时间公司项目需求,参与了把 MySQL 数据库迁移到 PostgreSQL 数据库的工作,本文主要记录常用语法的转换规则,待补充完善。

数据库版本:

  • MySQL 8.0.x
  • PostgreSQL 15.0.x

基本规则

引号、反引号

在 PostgreSQL 中,单引号 AS 'col1' 和反引号 `` 都不支持,要么去掉,要么用双引号代替。

在 Java 的 MyBitis xml 文件中,如果返回结果是 Map 结构,并且返回字段用 AS 转为驼峰,则必须用双引号包起来,否则返回后会转换为小写,如

<select id="getWaitAuditPurchaseReturn" resultType="java.util.Map">
select
coalesce(count(1),0) as "waitAuditNum",
min(prepared_bill_time) as "preparedBillMintime"
...

WHERE 中字段值的大小写与实际数据不一致

-- 这样在 MySQL 可以正常查询出来结果,但是在 PostgreSQL 中查询不到
-- 表中存的实践数据是大写的 MATERIAL_USE_TYPE
select id from system_user_privilege where tableAlias.privilege_type = 'material_use_type'

-- 可以用 UPPER 或 LOWER 函数处理一下
select id from system_user_privilege where tableAlias.privilege_type = UPPER('material_use_type')
阅读全文 »

正如标题,这是一个NB闪闪的开源库,名字为 ja-netfilter,关于这个开源库的详细说明,参见这里 zhile.io

本文以 IDEA 为例,说一下这个工具怎么用:

适用版本:jb 2021.3.x +
这之前的版本,还可以继续使用 IDE Eval Reset 插件。

1. 下载

从仓库下载最新程序包 https://gitee.com/ja-netfilter/ja-netfilter/releases

2. 解压后开始配置

2.1. 配置 xx.vmoptions

以下两种方式可选:

  • 方式一:手动定位到对应软件的 xx.vmoptions 文件,添加下面这一行 -javaagent:/absolute/path/to/ja-netfilter/ja-netfilter.jar
  • 方式二:执行命令 java -jar /path/to/ja-netfilter.jar 进行注入;

较新版本的 IDE (内置jdk17+),还需要添加以下两行:

--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED

2.2. 修改 config 目录中对应的配置文件

上面下载的压缩包,最新版本中已经包含了下面的设置,可以跳过。

这里以 jb 软件为例,主要修改如下:

dns.conf

[DNS]
EQUAL,jetbrains.com
EQUAL,brucege.com
EQUAL,plugin.obroom.com

power.conf

[Result]
; Suit 220701
EQUAL,108391492724719606277191711676038310454333436786970899072879934267610324870870961974305689698304529291751931883693569275416671653649715395540162187908455880751887548211257780817773830153477469379663893839249632010489688404104740814832791608983255964373246023808678041003248593298915323068020141515280275870731964298697511434302901212533563571472947179437111243030002421474283363073021442715554541318313064598900684758246291687123240210640543678544269324094608551763049140564128299834843381841274260516105408318037686490277144538983963856617365418526798235932271319705894170543971766101775628884107261100637290512593943587295268337137890353216997114446658051251047509442298463526766678103653729776506979657957966027949436493606289520405331110453990512846697802196701678785414928082416405650857741201229183421400567636999723106788808933737428330992184832395299929033666381663232693108552887968738513151493044369308652310586803160326722967115451573652070286501044484503083240302303438554529551204609089966636092666792347623413483134664670641246129954999815529917163967761617333572567787618346281658716181608204191963817312534492517480248086896060880038259592723773361709406277837609546030729611710076711450268767610513506889086815865283,65537,860106576952879101192782278876319243486072481962999610484027161162448933268423045647258145695082284265933019120714643752088997312766689988016808929265129401027490891810902278465065056686129972085119605237470899952751915070244375173428976413406363879128531449407795115913715863867259163957682164040613505040314747660800424242248055421184038777878268502955477482203711835548014501087778959157112423823275878824729132393281517778742463067583320091009916141454657614089600126948087954465055321987012989937065785013284988096504657892738536613208311013047138019418152103262155848541574327484510025594166239784429845180875774012229784878903603491426732347994359380330103328705981064044872334790365894924494923595382470094461546336020961505275530597716457288511366082299255537762891238136381924520749228412559219346777184174219999640906007205260040707839706131662149325151230558316068068139406816080119906833578907759960298749494098180107991752250725928647349597506532778539709852254478061194098069801549845163358315116260915270480057699929968468068015735162890213859113563672040630687357054902747438421559817252127187138838514773245413540030800888215961904267348727206110582505606182944023582459006406137831940959195566364811905585377246353->31872219281407242025505148642475109331663948030010491344733687844358944945421064967310388547820970408352359213697487269225694990179009814674781374751323403257628081559561462351695605167675284372388551941279783515209238245831229026662363729380633136520288327292047232179909791526492877475417113579821717193807584807644097527647305469671333646868883650312280989663788656507661713409911267085806708237966730821529702498972114194166091819277582149433578383639532136271637219758962252614390071122773223025154710411681628917523557526099053858210363406122853294409830276270946292893988830514538950951686480580886602618927728470029090747400687617046511462665469446846624685614084264191213318074804549715573780408305977947238915527798680393538207482620648181504876534152430149355791756374642327623133843473947861771150672096834149014464956451480803326284417202116346454345929350148770746553056995922154382822307758515805142704373984019252210715650875853634697920708113806880196144197384637328982263167395073688501517286678083973976140696077590122053014085412828620051470085033364773099146103525313018873319293728800442101520384088109603555959893639842091339193857485407672132882577840295039058621747654642202620767068924079813640067442975
EQUAL,820563695837794062003013052431566406311160519459527861500703856031109754642079235583817632608600538427437617602262999609013304012507897813563718719720856177652850327961467224291449089135680755288577504536702620359129295482393325960269624080511269764101665311320956470015613044808066402568798693281462244978128867910557946603386047729514659336854309276651962414690113978708520364504328849058883417158186751315886080272834506502242438553969507697483002851232580211232007222134718334176577725640440791904351641362718652452524224349310214787836932692511798322090590491010282507213990514918561984012596822561474687437143,65537,24521566609765666164947017540032021599255701751860227819512057581863724253675446227963662825786216373422117712052647819939094618512591273903731385388945941620956494535886991119537555521717683289574562412249381695575366776196301290570457146763799416784211789775179394339350479765228864277544252534115220169733628333836919758657866915165201332480467127194998195481209996470680276955438320553419743409285076366446411459237915876713514676197204668785300100857270615348770478845912795954436677863461158442534283102154396294509903255539003316675136070586165787963286744036831353098283719024130881707718857451774498022915819->986236757547332986472011617696226561292849812918563355472727826767720188564083584387121625107510786855734801053524719833194566624465665316622563244215340671405971599343902468620306327831715457360719532421388780770165778156818229863337344187575566725786793391480600129482653072861971002459947277805295727097226389568776499707662505334062639449916265137796823793276300221537201727072401742985542559596685092673521228140822200236743113743661549252453726123450722876929538747702356573783116366629850199080495560991841329893037291900147497007197055572787780928474439121332736213562021554409579596714683101113281773829

[Args]
EQUAL,65537,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281->3,24773058818499217187577663886010908531303294206336895556072197892590450942803807164562754911175164262596715237551312004078542654996496301487027034803410086499747369353221485073240039340641397198525027728751956658900801359887190562885573922317930300068615009483578963467556425525328780085523172495307229112069939166202511721671904748968934606589702999279663332403655662225374084460291376706916679151764149324177444374590606643838366605181996272409014933080082205048098737253668016260658830645459388519595314928290853199112791333551144805347785109465401055719331231478162870216035573012645710763533896540021550083104281
EQUAL,65537,112990544699464667379805164176191940546242208117491544203358534026745357579006792084392734842374059845912387257283707238075863959850326589016727302942528968334782467185179054600102556548201786183972872728459057873984508534595649484729912852626347880177196897414735118804133099744542685440257890337513274043513->3,112990544699464667379805164176191940546242208117491544203358534026745357579006792084392734842374059845912387257283707238075863959850326589016727302942528968334782467185179054600102556548201786183972872728459057873984508534595649484729912852626347880177196897414735118804133099744542685440257890337513274043513

url.conf

[URL]
PREFIX,https://account.jetbrains.com/lservice/rpc/validateKey.action

2.3. 启动软件激活

打开软件后,从这里 https://jetbra.in/s 找到对应软件的 key 进行激活。

本文适用于 JetBrains 系软件,包含通用及单个软件的设置、使用技巧等,主要是在工作使用过程中遇到的问题及解决方式笔记。

1. 设置

1.1. 通用设置

关闭自动保存

菜单:Appearance & Behavior > System Settings > Synchronization

取消勾选:

  • Synchronize files on frame or editor tab activation
  • Save files on frame deactiation
  • Use "safe write"(save changes to a temporary file first)
打开修改文件未保存标识

菜单:Editor > General > Editor Tabs > Appearance

勾选:

  • Mark modified (*)
阅读全文 »

JD-GUI 是一款大家耳熟能详的 Java 反编译工具,可以方便的将编译好的 .class 文件反编译为 .java 源码文件,用于开发调试、源码学习等。

官网地址:http://java-decompiler.github.io

Git 地址:https://github.com/java-decompiler/jd-gui

下载地址

当前最新版本:v1.6.6 @ Dec 25, 2019

解决在 macOS 下闪退问题

需要注意的是,运行 JD-GUI 所需 Java 版本最高为 JDK 10.0.2(可在官网文档查看),否则会出现闪退、无法使用等问题,所以需要修改设置进行指定,下面以 macOS 为例进行说明。

首先,使用如下命令,查看 jdk 的安装路径:

# 因为我只安装了 Java1.8 和 Java11 两个版本,所以这里需要找 1.8 的路径
➜ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home

其次,使用文本编辑器打开文件 /Applications/JD-GUI.app/Contents/MacOS/universalJavaApplicationStub.sh,修改如下部分:

# first check system variable "$JAVA_HOME"
# 这里的配置默认找的是系统环境变量中配置的 jdk 版本
# 而我配置的是 Java11,所以直接运行的时候出现闪退而无法使用
# 这里需要直接写死 1.8 的路径
if [ -n "$JAVA_HOME" ] ; then
JAVACMD="/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java"

保存后,重新打开 JD-GUI.app 即可。

本文只是项目过程中暂时能想到的一种方法,如果你有其它实现方式,欢迎留言与我交流。

原始数据

id(主键) organization_id audit_time(审核时间)
2orejelw5td3bwfkv 2oo2v3mqwrd832efh 2021-06-02 15:23:37
2or7zo75ygc7fi2l7 2oo2v3mqwrd832efh 2021-07-02 15:23:37
2or81tr5evpean60d 202106171149548es5ntrhd 2021-06-19 11:12:16
2or81tt1m5rnw1h0o 202106171149548es5ntrhd 2021-05-19 11:57:00
2or96z2524ac1zw0v 202106171149548es5ntrhd 2021-07-09 13:31:00

目标描述:针对每个 organization_id, 根据审核时间,获取最新审核的一条数据

预期结果

id(主键) organization_id audit_time(审核时间)
2or7zo75ygc7fi2l7 2oo2v3mqwrd832efh 2021-07-02 15:23:37
2or96z2524ac1zw0v 202106171149548es5ntrhd 2021-07-09 13:31:00

完整 SQL 如下:

SELECT
SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY audit_time),',',-1) AS id,
organization_id
FROM organization_auth_request
GROUP BY organization_id

关键点说明:

  • GROUP_CONCAT(id ORDER BY audit_time) 分组后拼接的时候,可以指定排序字段和排序方式,以确保能够按照指定顺序拼接
  • SUBSTRING_INDEX('待截取的字符串',',',-1)
    • 第一个参数是待截取的字符串;
    • 第二个参数是截取时以什么字符分组,比如这里是以 , 分组;
    • 第三个参数是截取方向和个数,-1 表示从末尾截取一组字符(正数从开头开始截取;负数从末尾开始截取)。

关于这两个函数的更多使用方式,参见官方文档或搜索引擎。