- /**gp中的基本sql语法**/
- --删除表
- drop table testtb;
- --创建表
- CREATE TABLE testtb
- (
- id integer,
- "name" character varying(2)
- )
- WITH (
- OIDS=FALSE
- )
- DISTRIBUTED BY (id);
- ALTER TABLE testtb OWNER TO gpadmin;
- --WITH 用来说明表的存储属性,比如表的压缩
- --DISTRIBUTED BY 定义表的分布键,这个键最好唯一,如果表中没有唯一键字段,可以定义DISTRIBUTED RANDOMLY作为分布建。
-
- --表的创建
- create table testTBbak (like testTB) -- like 复制表结构
- create table testtbbak1 as select * from testtb distributed by (name) -- 数据保留,可以指定分布键。
- select * into testtbbak2 from testTB -- into 保留数据,不能指定分布键
- select * from testtbbak2
-
- /**分区表**/
- -- 按照时间分区
-
- --
-
- --创建视图
- create view v_testtb as select * from testtb
-
- -- 删除数据
- delete from testtb -- 速度慢,会写日志。
- truncate testtb -- 速度快,但不会写日期。
-
- /**序列的使用**/
- --删除序列
- drop sequence myseq
- --创建序列(1是开始值,可以根据实际情况改变)
- create sequence myseq start 1
- --序列的使用
- insert into testTB values(nextval('myseq'),'小明')
- --重新设置序列值
- select setval('myseq',1)
- --查询
- select id,name from testTB order by 1
-
- -- explain 用于查看sql执行计划
- explain select * from testtb
-
- /**字符串函数**/
- -- || 字符串连接
- select '胡' || '黄' || '腾'
- -- length 字符长度
- select length('89998')
- -- substring 字符串截取,从那位开始,截几位
- select substring('123456' from 2 for 3)
- -- trim去字符前后空格
- select trim(' 234 fds ')
- -- lowere 字符转小写
- select lower('RER')
- -- upper 字符转大写
- select upper('rer')
- -- replace 替换字符
- select replace('aabbddee','aa','mm')
- -- position 查找指定字符位置
- select position('de' in 'abdeaf')
- -- split_part 根据指定字符查找给定字符的位置
- select split_part('aaa|bbb|ccc|eee','|',2)
-
- /**时间的函数**/
- -- age求俩日期之差
- select age(timestamp '1987-12-03',timestamp '2015-06-17')
- -- age如果一个日期则和当前日期求差
- select age(timestamp '1987-12-03')
- -- current_date 当前日期
- select current_date
- -- current_time 当前时间
- select current_time
- -- current_timestamp 当前时间戳
- select current_timestamp
- -- now 当前时间
- select now()
- -- extract 获取指定时间的具体某个参数
- select extract(day from date '2015-06-18')
- select extract(day from now())
- -- 时间相加
- select '2015-04-2 10:00:52'::timestamp + interval '10 days 2 hours 10 seconds'
- -- 时间相减
- select current_date - interval '10 days'
-
-
-
- /**gp中其他函数**/
- -- greatest 取两值中的最大值
- select greatest(3,9)
- -- 列转行
- insert into testtb(id,name)values (1,'ha');
- insert into testtb(id,name)values (1,'he');
- insert into testtb(id,name)values (1,'hi');
- insert into testtb(id,name)values (2,'xb');
- insert into testtb(id,name)values (2,'xh');
- insert into testtb(id,name)values (2,'xm');
- select id,string_agg(name,'|' order by name) from testtb group by id;
- -- 行转列
- select id,regexp_split_to_table(string_agg,E'\\|') str from texttb_m
-
- /**开窗函数**/
- --建表
- create table empsalary
- (
- depname varchar(20),
- empno integer,
- salary integer
- )
- distributed by (empno)
-
- insert into empsalary values ('develop',9,4500);
- insert into empsalary values ('develop',1,3200);
- insert into empsalary values ('develop',4,1000);
- insert into empsalary values ('develop',2,9100);
- insert into empsalary values ('develop',6,1000);
- insert into empsalary values ('person1',5,3100);
- insert into empsalary values ('person1',7,4100);
- insert into empsalary values ('sales',3,2400);
- insert into empsalary values ('sales',8,1200);
- insert into empsalary values ('sales',10,5100);
-
- -- rank 及 row_number 函数的应用
- select depname
- ,empno
- ,salary
- ,rank() over (partition by depname order by salary desc)
- ,row_number() over (partition by depname order by salary desc)
- from empsalary
- -- rank 识别重复记录
- -- row_number 不识别重复记录
-
- select *
- ,sum(salary) over () sum1
- ,sum(salary) over (order by salary) sum2
- ,sum(salary) over (partition by depname) sum3
- ,sum(salary) over (partition by depname order by salary) sum4
- from empsalary
-
- -- grouping by 的使用(其实就是简化了union)
- select depname ,sum(empno)
- from empsalary
- group by depname
- union all
- select depname ,sum(salary)
- from empsalary
- group by depname
-
- --等效于
- select depname,sum(empno),sum(salary)
- from empsalary
- group by grouping sets(depname)
命令行
- 当我们费尽千辛万苦安装完数据库后,一定会迫不及待的想使用它。骚年,不要着急,且看我为您解析PostgreSQL的启动,登录,退出,关闭过程。
-
- 一 启动数据库服务器
-
- 1. 没有设置环境变量的情况下,postgresql用户下:
-
-
- /usr/local/pgsql/bin/postgres -D data >./data/logfile 2>&1 &
-
-
-
- 其中/usr/local/pgsql/bin目录中存放着数据库的执行命令,/data是数据库的数据存放目录。小伙伴们可
-
- 以根据自己实际的安装目录调整上面的命令。
-
-
-
- 如下命令查看数据库进程有没有成功启动,当看到有几个postgres的进程时,说明启动成功。
-
- ps aux | grep postgres
-
-
-
-
- 2. 设置环境变量的情况下
-
- 如果需要指定环境变量,请按如下方式:
-
- postgres@lgr-pc:~$ vi .bash_profile
-
- 添加如下内容:
-
- PGDATA=/usr/local/pgsql/data;
-
- PATH=$PATH:$HOME/bin:/usr/local/pgsql/bin
-
- export PGDATA PATH
-
- 即指定pgdata和bin的目录,这里可以根据自己的实际目录指定。
-
- 编辑完环境变量文件后,运行如下命令使环境变量生效:
-
- postgres@lgr-pc:~$ . .bash_profile
-
- 设置完环境变量,运行如下命令启动服务器:
-
- postgres@lgr-pc:~$ pg_ctl start
-
-
- 二 登录服务器
-
- 当安装完数据库后,我们会有一个系统用户,一个数据库,一个数据库用户,他们默认的名称为:postgres
-
- 1. 如果没有设置bin目录的环境变量,那么
-
- postgres@lgr-pc:~$ /usr/local/pgsql/bin/psql
-
- 这样默认登录到postgres库中,当然也可以在psql后面加上库的名称,这样就可以登录到指定库中。如登录到test库:
-
- postgres@lgr-pc:~$ /usr/local/pgsql/bin/psql test
-
-
-
- 2. 如果您也像我一样设置了bin目录的环境变量,那么
-
- postgres@lgr-pc:~$ psql
-
- 这样默认的也是登录到postgres库中,同样的我们可以指定数据库名称,登录到指定库。
-
- postgres@lgr-pc:~$ psql test
-
-
- 三 退出登录
-
- 退出登录就很简单了,我们可以运行\q,或者ctrl+d
-
- postgres=# \q
-
-
- 四 关闭数据库服务器
-
- 关闭:
-
- postgres@lgr-pc:~$ pg_ctl stop
-
- 重启:
-
- postgres@lgr-pc:~$ pg_ctl restart