我正在尝试在Windows上使用pgloader for Postgresql,从http://pgloader.io/下载。
我尝试使用pgloader而不是COPY的原因是我想从分隔文件导入,其中包含要插入的源文件中的列的子集(而不是全部),在某些情况下,转换来自基于源格式插入日期的字符串(或一般的一种数据类型)。
我无法让pgloader工作,更不用说做我想做的事了。我开始试图让一个简单的加载工作。
我在Windows上运行postgresql 9.3.
我在fish
架构中创建了一个名为public
的测试表,数据库名为test
。
create table fish (
fish_id int,
fish_descr varchar(20)
);
在我的计算机上,我有一个名为more_fish.txt
的文件,有两行:
2|Sooodles
3|Poodles
(以管道分隔)。
我想将这两行插入fish
表。
运行以下COPY
按预期工作并插入2行:
copy fish FROM 'C:\Users\ShWiVeL\Desktop\more_fish.txt' delimiter '|';
为了确保在插入格式转换之前我已经掌握了pgloader的基础知识,我试图让上面的示例使用pgloader工作。
我在命令行中运行以下命令(我正在使用Windows):
cd C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin
pgloader commands.load
commands.load
文件位于该bin文件夹(以及pgloader.exe)中,并包含以下内容:
LOAD CSV
FROM 'C:\Users\ShWiVeL\Desktop\more_fish.txt' WITH ENCODING iso-646-us
HAVING FIELDS
(
fish_id, fish_descr
)
INTO postgresql://postgres@localhost:5432/test?fish
TARGET COLUMNS
(
fish_id, fish_descr
)
WITH truncate,
skip header = 0,
fields terminated by '|'
SET work_mem to '32 MB', maintenance_work_mem to '64 MB';
以上使用pgloader文档中的一个示例,只是为了我认为简单的测试而进行了修改。
我收到以下错误:
C:\Users\ShWiVeL\Desktop>cd C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin
C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin>pgloader commands.load
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {26922DB9}>:
Error opening shared object "sqlite3.dll":
The specified module could not be found.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE ] Skip this shared object and continue.
1: [RETRY ] Retry loading this shared object.
2: [CHANGE-PATHNAME] Specify a different pathname to load the shared object from.
0
(SB-SYS:DLOPEN-OR-LOSE #S(SB-ALIEN::SHARED-OBJECT :PATHNAME #P"sqlite3.dll" :NAMESTRING "sqlite3.dll" :HANDLE NIL :DONT-SAVE NIL))
0]
我不明白我为什么会收到错误:sqlite。我没有以任何方式指定它作为源数据库。
有没有人知道如何使用pgloader执行这个非常基本的COPY :(或者为什么我在运行上面时遇到上述错误)
copy fish FROM 'C:\Users\ShWiVeL\Desktop\more_fish.txt' delimiter '|';
用户:postgres 端口:默认为5432 数据库名称:test 表名:鱼 架构:公共
根据评论进行修改
正在运行pgloader --verbose commands.load
没有任何影响。
我尝试将sqlite3.dll放入bin文件夹,结果更改为:
C:\Users\ShWiVeL\Desktop>cd C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin
C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin>pgloader --verbose commands.load
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {26922DB9}>:
Error opening shared object "libeay32.dll":
%1 is not a valid Win32 application.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE ] Skip this shared object and continue.
1: [RETRY ] Retry loading this shared object.
2: [CHANGE-PATHNAME] Specify a different pathname to load the shared object from.
0
(SB-SYS:DLOPEN-OR-LOSE #S(SB-ALIEN::SHARED-OBJECT :PATHNAME #P"libeay32.dll" :NAMESTRING "libeay32.dll" :HANDLE NIL :DONT-SAVE NIL))
0]
尝试从https://openvpn.net/release/openssl/下载libeay32.dll
并将其放入bin文件夹,结果更改为:
C:\ Users \ ShWiVeL \ Desktop&gt; cd C:\ Users \ ShWiVeL \ Desktop \ postgresql \ postgresql \ PostgreSQLPortable \ App \ PgSQL \ bin
C:\Users\ShWiVeL\Desktop\postgresql\postgresql\PostgreSQLPortable\App\PgSQL\bin>pgloader --verbose commands.load
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "main thread" RUNNING {26922DB9}>:
Problem running initialization hook #<FUNCTION (LAMBDA ()
:IN
"//vboxsrv/vagrant/src/hooks.lisp")
{2275BA15}>:
Unable to load foreign library (LIBSSL).
Error opening shared object "libssl32.dll":
The specified procedure could not be found.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Skip this initialization hook.
0
(SB-INT:CALL-HOOKS "initialization" (#<FUNCTION (LAMBDA NIL :IN "//vboxsrv/vagrant/src/hooks.lisp") {2275BA15}> SB-BSD-SOCKETS-INTERNAL::CALL-WSA-STARTUP SB-WIN32::INITIALIZE-CONSOLE-CONTROL-HANDLER) :ON-ERROR :ERROR)
0]
(libssl32.dll
已经存在于bin文件夹中)