PostgreSQL表修改

-- 修改表字段类型
alter table '表名' alter  COLUMN '字段名' type '要修改的字段类型' ;
-- 添加表字段
ALTER TABLE '表名' ADD '字段名' '要修改的字段类型';
-- 删除表字段
ALTER TABLE '表名' DROP '字段名'; 
-- 表的重命名
ALTER TABLE '表名' RENAME TO '新表名';
-- 更改列的名字
ALTER TABLE '表名' RENAME '字段名' to '新字段名';

PostgreSQL创建只读账号

-- 回收创建表的权限
 revoke create on schema public from public;
-- 创建账号
create user readonly with encrypted password 'pwd';
alter user readonly set default_transaction_read_only=on;
-- 给只读账号连接数据的权限
grant connect on database 数据库名 to readonly;
-- 在指定数据库下执行
grant usage on schema 可配置多个schema to readonly;
grant select on all sequences in schema public to readonly;
grant select on all tables in schema public to readonly;
-- 新建的表也要给只读账号权限
alter default privileges in schema public grant select on tables to readonly;
说明:只做记录备用,未测试;
     该命令存在缺陷,如一个库存在多个schema需一一赋予权限,可能并非是最好的处理方式

Java程序实现进度条打印

//方法一(缺陷:在开发环境下可能显示模式是Unicode,然后\b就变成了个框框):
public static void main(String[] args) throws Exception {
    System.out.print("Progress:");
    for (int i = 1; i <= 100; i++) {
        System.out.print(i + "%");
        Thread.sleep(100);

        for (int j = 0; j <= String.valueOf(i).length(); j++) {
            System.out.print("\b");
        }
    }
    System.out.println("结束");
}
//方法二:
public static void main(String[] args) throws Exception {
    for (int i = 1; i <= 100; i++) {
	System.out.print('\r' + "Progress:" + i + "%");
	Thread.sleep(100);
    }
    System.out.println("结束");
}
知识点:
1.\b可在控制台删除一个字节的打印记录
2.\r可在控制台删除整行的打印记录

PostgreSQL查询数据库的连接信息

select * from pg_stat_activity;
-- pg_stat_activity为系统视图
-- 可根据where限定数据库名,连接ip,表名等字段查询相关信息
query_start:active状态的查询开始时间,如果状态不是active的,那么就是最后一次查询开始的时间

state:运行状态,可以为几种值。
active:正在执行查询;
idle:等待新的命令;
idle in transaction:后端是一个事务,但是尚未执行查询;
idle in transaction(aborted):和idle in transaction类似,除了事务执行出错。

query:执行的查询文本(即SQL)。
如果状态是active,那么就是正在执行的SQL;
如果是其他状态,则展示最后一次执行的SQL。

所以可以用:
select count(*) from pg_stat_activity where state='idle';
查询闲置连接数。如果数字过大,可以认为是有问题的(如连接忘记关闭)。
如果想进一步定位到有问题的SQL,可以如下查询:
select query,count(*) as num from pg_stat_activity where state='idle' group by query order by num desc;
杀掉进程
SELECT pg_terminate_backend(PID);
这种可以kill掉各种操作(select、update、delete、drop等)操作