利用pg_stat_statements排查PostgreSQL中的慢SQL

  1. 编辑postgresql.conf
    • shared_preload_libraries = 'pg_stat_statements'
    • track_activity_query_size = 16384

阅读全文

几个较新的Vert.x例子

阅读全文

PostgreSQL中执行即时代码段(匿名存储过程)

某些时候需要执行过程化的逻辑,单纯靠组织SQL语句已经完成不了了,这个时候一般需要引入存储过程用以实现。但是如果只是单纯执行一段逻辑,而不是要封装一个函数,用来接收参数复用,完全可以通过DO语句执行一个匿名代码段。这样就可以避免:创建存储过程 -> 调用存储过程 -> 删除存储过程的窘境。
这里给出一个简短的SQL演示:

DO
$$
declare
i int := 0;
begin
raise notice 'il:%',i;
declare
i int;
begin
raise notice 'i2:%',i;
end;
end
$$ language plpgsql;

阅读全文

PostgreSQL中的匿名存储过程

阅读全文

PortgreSQL中找到那些被大量顺序扫表没走索引的表

select schemaname,
relname,
seq_scan,
seq_tup_read,
seq_tup_read / seq_scan as avg,
idx_scan
from pg_stat_user_tables
where seq_scan > 0
order by seq_tup_read desc
limit 20

阅读全文

用groovy实现根据规则校验单据数据

单据字段校验,在任何管理信息系统中都是普通得不能再普通的问题。通常我们的都会选择在前端以及后端各实现一遍。
前端实现,方便用户体验;后端实现,确保数据健康。
但是总觉得同样的业务实现两遍,真的不符合直觉。我的想法是,把校验规则抽象出来,通过公共方法来处理单据校验问题。做到一套规则,两处判断。减少业务开发人员的重复劳动。
比如规则是这样的

[
{
"target": "v_name",
"expression": "notBlank(v_name)",
"tip": "姓名必填"
},
{
"target": [
"v_password",
"v_password_twice"
],
"expression": "v_password == v_password_twice",
"tip": "两次密码输入不一致"
}
]

阅读全文

突破mac系统要求密码不能小于4个字符的限制

  1. 在终端执行pwpolicy getaccountpolicies > temp.xml
  2. 编辑temp.xml文件,例如vim temp.xml
  3. 删除第一行Getting global account policies文字,保证这个文件以<?xml开头

阅读全文

完整卸载MacOS里的JDK

首先,所有的资料在java官方网站都有提供,我这里做个搬运工,只罗列一下重点。

阅读全文

MySQL日期字段同时实现新增默认值及修改默认值

如果说MySQL有什么功能是值得我留恋的,那这个功能绝对能排第一。要知道在PostgreSQL实现这么个修改默认值,还非得写个触发器不可,对新手来说太不友好了(具体可参考PostgreSQL中实现更新默认值)。
来看下在MySQL里怎么做,简单的一行

ALTER TABLE datalock ADD t_update  timestamp default current_timestamp on update current_timestamp COMMENT '变动时间';

阅读全文

使用postgrest全自动生成面向表的RESTful接口

尝试使用了一下postgrest,用法非常简单,但是功能非常强大。不仅能生成相应的RESTful接口,更是连swagger文档都给准备好了,简直意外惊喜。
关于使用,如果有docker经验的话,直接看这个compose文件就好了

# postgrest.yml

version: '3'
services:
server:
image: postgrest/postgrest
ports:
- "3000:3000"
links:
- db:db
environment:
PGRST_DB_URI: postgres://app_user:password@db:5432/app_db
PGRST_DB_SCHEMA: public
PGRST_DB_ANON_ROLE: app_user #In production this role should not be the same as the one used for the connection
depends_on:
- db
db:
image: postgres
ports:
- "5433:5432"
environment:
POSTGRES_DB: app_db
POSTGRES_USER: app_user
POSTGRES_PASSWORD: password
# Uncomment this if you want to persist the data.
# volumes:
# - "./pgdata:/var/lib/postgresql/data"
swagger:
image: swaggerapi/swagger-ui
ports:
- "8080:8080"
expose:
- "8080"
environment:
API_URL: http://127.0.0.1:3000/

阅读全文