- 连接数据库
$ psql -U user_name -d database_name -h serverhost
- 常用操作
\h #查看所有的sql关键字
\? #命令行操作的帮助
\d #查看当前schema 中所有的表
\q #退出pg命令行
\d #schema.table 查看表的结构
\x #横纵显示切换
\dT+ #显示扩展类型相关属性及描述
\dx #显示已安装的扩展插件
\l #列出所有的数据库
\timing #显示执行时间
\c database_name #切换数据库
set search to schema #切换schema
explain sql #解释或分析sql执行过程
- 创建数据库
postgres=# CREATE DATABASE testdb;
CREATE DATABASE
- 创建Schema
PG 系统默认的 Schema 名称通常是以 **pg_**开头的,每个数据库都包含public 表空间,默认创建时不指定表空间,则会把对象或者表放在当前表空间下。
postgres=# CREATE SCHEMA testSchema;
CREATE SCHEMA
- 创建指定表空间下的表
postgres=# CREATE TABLE testSchema.test(id SERIAL ,age INT,name Text);
CREATE TABLE
- 删除表空间
DROP SCHEMA testSchema;
- 删除该表空间下的所有对象
DROP SCHEMA testSchema CASCADE;
- 给用户分配一个表空间
schema_name 也可以省略,在这种情况下, schema_name 名称将会为当前用户的名称
CREATE SCHEMA schema_name AUTHORIZATION user_name;
- SHOW search_path
testdb=# SHOW search_path;
search_path
-------------
$user,public
(1 行记录)
testdb=#
$user 该参数指定了 该用户查询时会查询与用户名称相同的schema ,若存在则查询结果,不存在则忽略。public 在所有用户创建时都会默认创建该 public 命名空间 ,指定任何一个用户在没有指定schema 时,查询、修改、删除等操作都会在该命名空间下执行。
- 指定创建对象等操作到指定Schema
在这我们省略了$user ,即我们访问表数据时 schema 没有命名空间的约束
SET search_path TO testSchema ,public;
或
SET search_path TO testSchema ;
这样我们就不会再访问public ,也没有其他的作用,我们也可以删除掉。
- 授权来分配权限
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
表示:为所有用户分配在 public 表空间下连接 的权限,默认用户在public 下可进行
创建和使用的权限。
第一个 public 表示 表空间 第二个 PUBLIC 表示所有人
- $$ 理解
CREATE
FUNCTION populate() RETURNS integer AS $$
DECLARE
-- 声明段
BEGIN
PERFORM my_function();
END;
$$
LANGUAGE plpgsql;
RETURNS integer ,这个名称为 populate的FUNCTION ,返回值的数据类型是 integer 类型的。AS 意味着 后面是函数的代码部分。$$ 意思是 实际代码的开始,当遇到下一个 $$ 的时候,为代码的结束 ,最后就是 LANGUAGE plpgsql;意思是整个创建 函数的 语句结束了,数据库去编译整个代码。
- 查看同步流状态
postgres=# SELECT * FROM PG_STAT_REPLICATION;
(0 行记录)
postgres=#
- 从库执行
select pg_is_wal_replay_paused();
f 表示没有暂停,t 表示暂停
注意
上述函数在PostgreSQL 不同版本中略有差异,上述为PG 10.x版本
在pg中系统表默认都是以pg_ 开头的,以至于不会与我们自己新建的表名称冲突
配置默认创建的对象或者表放在默认的表空间下,在postgresql.conf中配置
default_tablespace = '$user'
search_path = '$user'