我是PostgreSQL的狂热用户,我想鼓励其他人使用它。我(学术界)的很多人都使用Stata,我已经设法在Mac OS X上编译 一个允许Stata直接访问PostgreSQL的插件;这得到了那些尝试过的人的好评(尽管我认为还有改进的余地)。但是,我的许多使用Stata的同事都运行Windows,如果这个插件可以为他们工作也会很棒。
以下是我在OS X上编译插件的步骤(插件来自牛津的一个站点);我从我的博客here复制了这些步骤。
我的问题是:如何修改这些指令以在Windows上运行? (我无法访问Windows,所以如果你能确认你可以修改它以便为你工作,那就太好了。)
请注意,我从MacPorts安装了PostgreSQL,我也有wget
(sudo port install wget
)。
cd ~/Downloads
wget http://code.ceu.ox.ac.uk/stata/pgload-0.1.tar.gz
tar -zxvf pgload-0.1.tar.gz
mkdir ~/Downloads/stata
cd ~/Downloads/stata/
wget http://www.stata.com/plugins/stplugin.c
wget http://www.stata.com/plugins/stplugin.h
vim ~/Downloads/pgload-0.1/Makefile
最后一步打开Makefile。我对五行进行了更改(如果你从MacPorts以外的地方安装PostgreSQL 9.3,则最后两行会有所不同。)
PLUGIN_SYS=APPLEMAC
INSTALL_LOCATION=~/Library/Application\ Support/Stata/ado/personal
STATAPLUG_INC=~/Downloads/stata
PQ_INC=/opt/local/include/postgresql93
PG_SERVER_INC=/opt/local/include/postgresql93/server
然后我保存并退出。然后
cd ~/Downloads/pgload-0.1
make
sudo make install
loadsql.ado
文件放在~/Library/Application\ Support/Stata/ado/personal
中,其中包含以下内容:
program define loadsql
*! Load the output of an SQL file into Stata, version 1.4 (iandgow@gmail.com)
version 13.1
syntax using/, CONN(string)
#delimit;
tempname sqlfile exec line;
file open `sqlfile' using `"`using'"', read text;
file read `sqlfile' `line';
while r(eof)==0 {;
local `exec' `"``exec'' ``line''
"';
file read `sqlfile' `line';
};
file close `sqlfile';
* display "`conn'";
pgload "`conn'" "``exec''", clear;
* pgload "``dsn''" "SELECT permno, date, abs(prc) AS prc FROM crsp.dsf LIMIT 10", clear;
end;
答案 0 :(得分:2)
通过一些工作,我成功地构建并运行了pgload。在此过程中出现了一些错误,我在下面进行了讨论。然而,在测试插件之后,我建议只使用ODBC,因为它更容易设置并且更快一点。
我正在运行Windows 7 x64,postgres 9.3 64位,stata-SE 11.2 64位
strncpy_s(svalue, 244, valuetmp, 244);
可能不需要,但此处有关于安全性的警告)strcat_s(stata_mac_vars, sizeof stata_mac_vars, fname);
可能不需要,但此处有关于安全性的警告)memset(tmpsql_buf,'\0', tmpsql_buf_len + 1);
)#define strncasecmp _strnicmp
)#include <strptime.h>
中添加了一个include。program pg,plugin
测试插件 - 加载确认无警告 pgload "dbname=research host=localhost user=XXX password=XXXX" "SELECT permno, date, abs(prc) AS prc FROM crsp.dsf LIMIT 10",clear
,这应该看起来很熟悉。
-Joe
P.S。感谢您的博客/ github;我无耻地从两个人那里偷走了一些东西。