您的位置:首页 > 数据库 > SQL

TPC-H数据导入postgresql教程

2016-04-05 19:06 639 查看

POSTGRESQL TPC-H测试

postgresql & tpc-h(dbgen)

TPC-H是TPC提供的一个benchmark,用来模拟一个现实中的商业应用,可以生成一堆虚构的数据,且自带一些查询,可以导入到各种数据库中来模拟现实需求,检查性能。

具体是怎样的数据见:http://www.tpc.org/tpch/spec/tpch2.16.0.pdf

1、做实验之前的配置

a、首先在mac下安装postgresql

终端命令

brew install postgresql -v

若出现Error: Cannot write to /usr/local/Cellar

可以输入以下命令进行解决

sudo chown -R $USER /usr/local

b、接着下载dbgen

在这个网站上下载

https://github.com/electrum/tpch-dbgen

解压后在根目录找到makefile.suite 进行修改

把103~112行左右改成这个样子

CC      = GCC
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
#                                  SQLSERVER, SYBASE, ORACLE
# Current values for MACHINE are:  ATT, DOS, HP, IBM, ICL, MVS,
#                                  SGI, SUN, U2200, VMS, LINUX, WIN32
# Current values for WORKLOAD are:  TPCH
DATABASE= SQLSERVER
MACHINE = LINUX
WORKLOAD = TPCH
#


c、 接着在终端访问至该文件的根目录

输入make 就会发现该文件有dbgen文件生成



d、在终端输入命令

./dbgen -s 1 -f

就会发现在文件夹下有tbl文件生成,其数据如下



2、创建数据库:

这里启动和关闭数据库的命令在mac的终端下运行,linux没试过

启动PostgreSQl

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

关闭 PostgreSQL:

pg_ctl -D /usr/local/var/postgres stop -s -m fast

创建一个 PostgreSQL 用户

createuser username -P

Enter password for new role:

Enter it again:

上面的 username 是用户名,回车输入 2 次用户密码后即用户创建完成。更多用户创建信息可以 “createuser –help” 查看。

创建数据库

createdb dbname -O username -E UTF8 -e

上面创建了一个名为 dbname 的数据库,并指定 username 为改数据库的拥有者(owner),数据库的编码(encoding)是 UTF8,参数 “-e” 是指把数据库执行操作的命令显示出来。

更多数据库创建信息可以 “createdb –help” 查看。

连接数据库

psql -U username -d dbname -h 127.0.0.1

3、创建表, tpc-h表的模式存储在dss.dll的文件上,用文本编辑器打开



在创建的数据库中一一创建,创建出8张表



输入\dt 查看所有表是否创建成功



4、载入数据

注意!!!

需要先载入数据再进行添加主键和外键,否则添加主键、外键之后,再插入数据,无法插入,因为无法获得外键数据。

tbl生成的文件无法自动转化成postgresql需要的数据,需要修改,将每一行最后一个’|’去掉才能转化

原因英文资料上是这样写的

PostgreSQL requires that the delimiter should not appear at the end of every line

Postgresql数据库不允许最后有分隔符出现

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
string s;
ifstream in;
in.open("lineitem.tbl");
ofstream out;
out.open("lineitem1.tbl");
if (in.is_open()) {
while (getline(in, s)) {
int len = s.length();
int i = len-1;
//将最后一个竖号去掉才能满足postgresql的数据读取
if (s[i] == '|')
s[i] = '\n';
out << s;
}
}
out.close();
return 0;
}


如此修改文件名执行8次生成tbl文件



接着从数据库中载入数据



5、添加外键、主键

载入数据后,就可以添加外键、主键

对每张表添加外键、主键,修改tpch-dbgen文件夹中的dss.ri(用文本编辑器打开),将dss.ri所有添加外键和主键的信息都按照以下修改,并注释掉图上的connect to tpcd





如果是在linux下要先输入命令

sudo su 用户名

开启数据库

在mac下启动数据库

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

接着在终端执行命令 psql -f 文件路径 数据库名称



就完成了

查看表中的信息是否修改



参考链接:

http://m.oschina.net/blog/308688

http://www.itpub.net/forum.php?mod=viewthread&action=printable&tid=1422291
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 postgresql mac