postgres使用记录
1、postgres中的schema
schema是处于数据库和表之间的一层结构,可以理解为命名空间,可以翻译成模式或者架构
数据库-schema-表,所以表示建立在schema中的
schema不能嵌套,同一schema下不能有重复的对象名字
create table user12(a int);
select schemaname from pg_catalog.pg_tables where tablename = 'user12'; # 系统视图中查找表对应的schema
\dt user12 # 查看表的属性
\dn # 查看库中所有的schema
如果创建表时没有显式指定schema,新创建的表会放在public schema中,其他对象也是一样的;
有两种方式查看表是属于哪个schema的,1 查看系统目录视图,2 使用psql命令
注意:
"select * from user" # 这个查询的user表,和public.user不一样,user是定义在数据库实例中,不在数据库中
一个数据库集群中可以有一个或多个命名的数据库;
一个数据库包含一个或多个命名的模式;
使用模式的好处:
-
一个数据库中可以有多个用户使用多个模式,互不干扰
-
第三方应用可以放在不同的模式中,防止对象的名字冲突
如果不写特定的模式名,都会默认添加到默认的模式中,根据搜索路径顺序添加的
搜索路径:
show search_path;
默认值为:
"$user", public
可以修改这个搜索路径,将第一个值设置成我们需要的模式,然后默认数据添加就添加到对应的模式了;不需要在指定模式名了
SET search_path TO myschema,public;
还原search_path:
set search_path TO "$user",public;
set search_path = "$user",public;
2、角色和用户
角色role和用户user是两个相同的对象,唯一的区别是创建的时候;
默认创建的角色是没有登录权限,而创建的用户有登录权限
create role zhanzhan password '895544';
-- 删除角色
drop role zhanzhan;
-- 创建和删除用户
create user zhanzhan1 password '895544';
-- 删除用户
drop user zhanhan1;
3、表空间
表空间是用来规定数据库的存放位置;
所以创建数据库时可以指定数据库的表空间;
4、数据库的权限
http://www.freeoa.net/osuport/db/the-postgres-privileges_3112.html
命令行
http://www.freeoa.net/osuport/db/postgresql-comm-used-cmd-refer_3072.html
启动命令:
psql -U postgres -d postgres
创建模式
CREATE SCHEMA freeoa AUTHORIZATION postgres;
查看数据库版本号
select version();
常见问题记录
1、mac系统异常关机之后点击sql shell 打不开了
启动sql shell的脚本位置:
/Library/PostgreSQL/13/scripts/runpsql.sh
mac异常关机后打不开了,
尝试手动启动sql:
psql -U postgres -d postgres -h 127.0.0.1
如果连接不上了,尝试删除/usr/local/var/postgres/postmaster.pid,然后重试