PostgreSQL 常用脚本

安装配置

创建


-- 创建数据库
-- database_name,数据库名称
-- database_user,用户名
CREATE DATABASE database_name WITH OWNER = database_user;
CREATE DATABASE database_name OWNER database_user;

-- 复制数据库
-- database_name,数据库名称
-- database_user,用户名
-- original_database_name,原始数据库名称
CREATE DATABASE database_name WITH TEMPLATE original_database_name OWNER database_user;

扩展


-- 创建 UUID 扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- 验证 UUID 扩展
SELECT uuid_generate_v4();

-- 创建 cube 扩展
CREATE EXTENSION IF NOT EXISTS cube;

-- 创建 earthdistance 扩展
CREATE EXTENSION IF NOT EXISTS earthdistance;

函数


-- 隐式将整形转换成字符串,但是会有一些问题,参考 https://stackoverflow.com/questions/50025750/postgres-convert-integer-into-text。通常情况下还是建议使用 CAST 函数来实现。
-- 使用场景:在数据库迁移的时候(比如 Microsoft SQL Server 转成 PostgreSQL,Microsoft SQL Server 默认是支持的)需要隐式转换,以达到快速实现的目的
CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int4out($1));';
CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS IMPLICIT;
COMMENT ON FUNCTION pg_catalog.text(integer) IS 'convert integer to text';
CREATE FUNCTION pg_catalog.text(bigint) RETURNS text STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT textin(int8out($1));';
CREATE CAST (bigint AS text) WITH FUNCTION pg_catalog.text(bigint) AS IMPLICIT;
COMMENT ON FUNCTION pg_catalog.text(bigint) IS 'convert bigint to text';

运维管理

分析


-- 查询当前数据库 TOP 20 大表
SELECT table_name
    ,pg_size_pretty(pg_relation_size(table_schema || '.' || table_name)) AS size
FROM information_schema.tables
ORDER BY pg_relation_size(table_schema || '.' || table_name) DESC LIMIT 20;

-- 查询单个表大小
SELECT pg_size_pretty(pg_relation_size(table_name));

-- 查询数据库活动的查询
SELECT current_timestamp - query_start AS runtime
    ,query_start
    ,datname
    ,pid
    ,query
FROM pg_stat_activity
WHERE query_start IS NOT NULL
ORDER BY 1 DESC limit 20;

维护


-- Cancel Processes by pid
SELECT pg_cancel_backend(pid int);

-- Terminate Processes by pid
SELECT pg_terminate_backend(pid int);

-- Kill all existing connections in the original database
-- source_db,数据库名称
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'source_db'
AND pid <> pg_backend_pid();

-- garbage-collect and optionally analyze a database
-- table_name,数据库表名
VACUUM table_name;
VACUUM FULL table_name;

权限


-- CREATE USER OR ROLE,PostgreSQL 中创建用户和角色是等效的
-- role_name,用户角色名称
-- user_password,用户密码
-- user_name,用户角色名称
CREATE ROLE role_name WITH CREATEDB CREATEROLE LOGIN PASSWORD 'user_password';
CREATE user user_name PASSWORD 'user_password';

-- 分配所有权限
-- database_name,数据库名称
-- database_user,数据库用户
GRANT ALL PRIVILEGES ON database_name TO database_user;

-- 修改表的 Owner
ALTER TABLE table_name OWNER TO database_user;

-- 分配 FUNCTION 的权限给指定用户
-- function_name,函数名称
-- parameter1_type,第一个函数参数类型
-- parameter2_type,第二个函数参数类型
-- database_user,数据库用户
GRANT EXECUTE ON FUNCTION function_name(parameter1_type, parameter2_type, ...) TO database_user;

-- 修改 FUNCTION 的 Owner
-- function_name,函数名称
-- parameter1_type,第一个函数参数类型
-- parameter2_type,第二个函数参数类型
-- database_user,数据库用户
ALTER FUNCTION function_name(parameter1_type, parameter2_type, ...) OWNER TO database_user;

配置


-- 重载配置信息,使配置生效
-- pg_hba.conf
SELECT pg_reload_conf();

猜你喜欢

转载自www.cnblogs.com/nehcdahc/p/12176502.html