11

我在由企业 IT 严格管理的 Windows 7 笔记本电脑上运行PostgreSQL 9.6 。我没有这台笔记本电脑的管理员权限,但可以通过 BeyondTrust 授予的提升权限做“很多”事情,包括软件安装。

我使用这个数据库从各种来源导入一些中等规模的数据集,并进行一些深入的分析和报告。这些数据集具有疯狂的编码和格式变化,这在导入它们时会带来挑战。对于一个数据集,我首先将其导入 MySQL,从数据中去除违规字符,将其导出回 CSV,最后将清理后的数据导入 PostgreSQL。

作为实验,我在运行 macOS 10.12 的家庭 iMac 上安装了 PostgreSQL 9.6 和 pg_loader,它能够毫无问题地导入所有数据集。

鉴于所有这些作为背景,我需要使用pg_loader导入各种数据集。但是,该网站不提供 Windows 安装程序或在 Windows 上编译它的说明。

任何人都可以向我指出以下方向之一,列表从最可取到最不可取吗?

  1. pg_loader 的 Windows 安装程序
  2. pg_loader 的类似替代品的 Windows 安装程序
  3. Windows 上编译 pg_loader 的详细说明
  4. 在导入之前使用 Python 清理数据的建议(警告:我对 Python 的经验很少)
4

2 回答 2

9

您可以安装适用于 Linux 的 Windows 子系统apt,安装 Linux 发行版,然后使用或其他包管理器安装 pgloader -

$ sudo apt install pgloader
$ pgloader --version

pgloader version "3.4.1"
compiled with SBCL 1.3.3.debian

$ cd /mnt/c/Users/bburns/Desktop
$ pgloader ....
于 2019-12-17T08:24:20.710 回答
4

这个解决方案对于最初的提问者来说可能有点晚了,但对于那些仍在寻找 Windows 解决方案的人来说。我可以确认我能够使用 Docker for Windows 让 pgloader 正常工作。

我的环境是在 Windows 10 PC 上安装的本地 MySQL。我为 Windows 安装了 Docker。然后我通过 docker 安装了 PostgreSQL: docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword -d postgres

最后,我通过 docker 运行 pgloader,使用以下命令将模式和数据从 mysql 拉到 postgres: docker run --rm --name pgloader dimitri/pgloader:latest pgloader mysql://root:root@host.docker.internal/my_db_name pgsql://postgres:mysecretpassword@host.docker.internal/postgres

这在我的 postgres 实例上创建了一个名为“my_db_name”的模式。“root:root”和“postgres:mysecretpassword”是我的用户名:密码详细信息。这显然是一个生产就绪环境!另一个有用的位“host.docker.internal”是 docker 对父主机环境的引用。另外,我忽略了 SBCL 警告。

我仍在处理结果。大多数东西看起来都迁移成功了。我缺少触发器(不支持)和一些外键(错误?)。无论如何,我希望这可能对其他人有所帮助。

于 2018-12-18T23:56:09.233 回答