赞
踩
因为公司最近业务需求,需要一个可管理大量数据的数据库管理系统存储和管理相关数据。选用的PostgreSQL,我自己觉得免费又好看哈哈哈,因为还没正式开始用,使用感受将在后续进行补充。
原数据:SQLite数据,.db
存储方式
现在需要:整个原始数据库导入到PostgreSQL
pgloader可以将各种文件数据(如csv、DBF
等),数据库(如SQLite、MySQL
)等导入到PostgreSQL中。据我这两天查询资料发现,pgloader只适用于Linux系统,Windows没查到使用方法。尝试导入的过程中加上pgloader一共试了三种方法,另外两种都是逐行写入(数据量很小可以使用),因为公司的数据量很大,均花费超过半个小时的时间,而使用pgloader整个导入过程只花费了三分钟!!!
官方说明:pgloader
借鉴网上的方法,最广泛的是使用docker安装(系统:win11
,只记录我的安装过程和问题解决)
下载网址:Docker,在整个过程中,只打开过一次哈哈哈,配好WSL2后就没打开过了,还不太会用,应该是需要拉取镜像的时候就用docker命令在命令行拉取吧?这个后续学习一下,感觉挺有用的。
刚打开docker时因为没有Linux环境,所以提示安装WSL2,提示教程见配置链接。在教程中我下载的是Ubuntu22.04版本。
打开Ubuntu,输入:sudo apt-get install pgloader
这里我报错了,显示unable to locate package pgloader
,更新apt即可:sudo apt-get update
。
拉取镜像及显示版本等信息:
docker pull dimitri/pgloader
docker run --rm --name pgloader dimitri/pgloader:latest pgloader --version
docker run --rm --name pgloader dimitri/pgloader:latest pgloader --help
到此为止pgloader就安好啦,最难的也是花我时间最多的就是后面的load过程了。
我的原始数据,和我目标存储位置都在Windows下面,所以难点在于Windows和Ubuntu怎么共享这些文件以及如何远程连接。
命令行输入:vim pgload.load
写入以下数据:(可以参考pgloader官方文档,我写的只是我需要的,后续权限我会用psql添加)
LOAD DATABASE
FROM sqlite:///mnt/winshare/xxx.db
INTO postgresql://postgres:密码@实际ip地址:5432/xxx
with include drop,create tables,create indexes,reset sequences,workers=8,concurrency=1
;
说明:
from
这一行是SQLite数据地址,为了获取到Windows的db文件,我在Windows创建了一个共享文件夹,Ubuntu里也创建了一个对应的文件夹以共享获取到Windows的数据,/mnt/winshare/
就是我Ubuntu里的地址,SQLite数据我放在win的共享文件夹里的。之前其他都设置好了结果显示连接、读取失败(当时两根斜线),后面加了一根斜线就成功了!我感觉是因为这是Ubuntu下的地址,有知道的可以告诉一下我~into
这一行是postgresql的地址,我是做的远程连接,因为我的postgresql在Windows系统下。其中密码
对应你的postgresql登录密码,实际ip
是我win的IP地址,xxx
是要导入的数据库名称。注意!这个数据库是你已经在postgresql创建好的。with
后面是一些数据库的权限设置,在pgloader官方说明文档里有,对应有不同数据库的语法说明。load database
是不变的,表明你导入的数据是数据库而不是文件。命令行输入:pgloader pgload.load
中途我报了很多次错误,比如:
展示一下导入成功的信息哈哈哈哈(骄傲),但这个毕竟是load data,所以数据库中的关系的约束、索引是没有的,目前我还不知道怎么在load的时候将原数据库的配置一起导入:
我用python写入和psql写入均需要半个小时以上哈哈哈,这个环境配好和脚本写好之后只需要三分钟!!!开心开心~
注意:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。