postgres 默认用户是postgres,为超级用户。
第一步:先以postgress 登录
1)psql -U '用户名'
2.)创建数据库新用户
CREATE USER 用户名 WITH PASSWORD '*****';
3)授予用户数据库权限
GRANT ALL PRIVILEGES ON DATABASE 数据库名 TO 用户名;
4)授予用户查看刚授权的数据库的里面的表的权限
GRANT ALL PRIVILEGES ON TABLE 表名 TO 用户名;
附带一条:修改的表的类型
alter table 表名 alter 字段名 type 类型;
附带一条:增加表新的字段
alter table 表名 add column 字段名 text(字段类型);
2018-08/22新增:设置主键自增
CREATE SEQUENCE user_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
alter table sys_user alter COLUMN id set DEFAULT nextval('user_id_seq');
2018-11/14新增:postgres创建B-Tree索引
-- create index '索引名' on '表名' ('需要索引的字段')
CREATE INDEX ip_store_inde on ip_store (ip_network);
添加各种约束
1. 添加主键
alter table goods add primary key(sid);
2. 添加外键
alter table orders add foreign key(goods_id) references goods(sid) on update cascade on delete cascade;
on update cascade: 被引用行更新时,引用行自动更新;
on update restrict: 被引用的行禁止更新;
on delete cascade: 被引用行删除时,引用行也一起删除;
on dellete restrict: 被引用的行禁止删除;
3. 删除外键
alter table orders drop constraint orders_goods_id_fkey;
4. 添加唯一约束
alter table goods add constraint unique_goods_sid unique(sid);
5. 删除默认值
alter table goods alter column sid drop default;
6. 修改字段的数据类型
-- 语法
-- alter table TableName alter column columnName type newType;
-- 下面示例character varying是一个类型, 表示无长度限制的字符串
alter table goods alter column sid type character varying;
alter table goods alter column sid type int8;
7. 重命名字段
alter table goods rename column sid to ssid;
建表SQL示例
CREATE TABLE nginx_server_config (
id serial NOT NULL ,
listen_port int4 NOT NULL,
server_name varchar(255) not null,
location varchar(255) null,
is_ssl int2 null,
ssl_session_timeout varchar null,
ssl_cert_name varchar(255) null,
ssl_cert_key_name varchar(255) null,
proxy_pass_url varchar(255) not null,
create_date timestamp(6) not null,
update_date timestamp(6) null,
remark varchar(255) null,
client_max_body_size varchar null,
constraint PK_nginx_server_config primary key (id)
);
8. 表新增列
# 不存在则创建
ALTER TABLE sys_user ADD COLUMN IF NOT EXISTS v6_level int2;
# 直接创建
ALTER TABLE sys_user ADD COLUMN v6_level int2;
9. array和jsonb类型操作
-- jsonb 类型数据类型操作
DROP TABLE IF EXISTS public.test_jsonb;
CREATE TABLE public.test_jsonb (
id int4,
data jsonb
);
insert into test_jsonb values(1,'{"id":1,"name":"小明", "age":18}');
select * from test_jsonb;
-- array 类型数据类型操作
DROP TABLE IF EXISTS public.test_array;
CREATE TABLE public.test_array (
id int4,
data varchar(128)[]
);
insert into test_array values(1,array['fisrt','second']);
select * from test_array;
10. 判断表是否存在
-- 语法 select count(*) from pg_class where realname = '表名';
select count(*) from pg_class where relname = 'sys_command';
11.创建唯一键约束
constraint user_info_unique_userid unique(userid)
12.查看表字段类型
-- \d 表的名字
\d sys_role
结果如下:
Table "public.sys_role"
Column | Type | Modifiers
-------------+--------------------------------+----------------------------------------------------
id | integer | not null default nextval('sys_role_sqp'::regclass)
name | character varying(255) |
value | json |
create_date | timestamp(6) without time zone |
update_date | timestamp(6) without time zone |
remark | character varying(255) |
13. 正则查询
-- 使用符号~匹配
-- "~":区分大小写,"~*"不区分大小写
-- "\A":表示以特定的字符串(string)开始,"\Z": 表示以特定的字符串(string)结尾,"\\"表示转译
-- 例子:email值:15912340000@163.com
select email from sys_user where email ~ '(\d)+.com';
14. 导入sql文件
--- 说明
--- psql -d 数据库名 -U 数据库属于的用户 -f 导入的sql文件路径
psql -d user_db -U admin -f /home/import.sql