bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Database - 資料庫 PostgreSQL PostgreSQL 資料庫隨程式打包實例
查看: 5080|回復: 0
go

PostgreSQL 資料庫隨程式打包實例

Rank: 9Rank: 9Rank: 9

發表於 2006-9-13 15:16 |顯示全部帖子
文章來源: http://www.cublog.cn/opera/showart.php?blogid=16622&id=92785

Windows 版本的 PostgreSQL 安装过程较为复杂(本文特指 8.0.3 以下版本),官方使用了 pginstaller 将 PostgreSQL 打为一个 msi 包,单独安装问题不大,但是有以下几个问题:
1、远程桌面安装兼容性差(目前官方的说法是除了 win2003 都有问题)
2、无法随程序打包
3、安装后的建库工作会受到分区格式的影响

针对以上问题,现给出如下解决方案:
A、在随便一台机器上装好 pgsql,并且建好库、导好数据

B、将整个 pgsql 的安装好的目录复制到一个临时文件夹(例如d:\temp),应该包括:bin、data、include、lib、share等,视情况可以考虑加入 PgAdmin III

C、在临时文件夹中建立 dll 目录,包括以下 5 个文件:libeay32.dll / libiconv-2.dll / libintl-2.dll / libpq.dll / ssleay32.dll (都可以在安装好的机器中找到)

D、网上去找个 ntright.exe 文件,放在 bin 目录里(随便放哪,但是后面安装完成最好删掉)
——修正:网上再去找个 netuser.exe, 放在 bin 目录里
——感谢 canders 兄的提醒,之前没考虑到用户帐号过期问题

E、在临时文件夹中建立 setup.bat 文件,内容如下:
  1. REM 创建 postgres 用户,用来管理服务
  2. net user postgres [passwd] /add /PASSWORDCHG:NO

  3. REM 让 postgres 用户不属于 users 组,官方说不安全
  4. net localgroup users postgres /delete

  5. REM 设置 postgres 用户密码永不过期,技巧!!
  6. .\bin\netuser postgres /pwnexp:y

  7. REM 拷贝文件,力气活 copy
  8. .\dll\*.* %windir%\system32 /Y

  9. REM 赋予 postgres 用户 logon as service 权限,技巧!!
  10. REM 插一句废话,ntrights.exe 的参数列表里没有我用的这个
  11. .\bin\ntrights.exe -u postgres +r SeServiceLogonRight

  12. REM 以下摘自 pginstaller 源文件,照做,主要是 postgres 用户的文件权限
  13. REM 其实是给 ntfs 用的,xp 在 fat32 格式时会报错,无视!
  14. cacls . /E /T /D postgres
  15. cacls . /E /T /G postgres:R
  16. cacls .\data /E /T /P postgres:C

  17. REM 建立 PostgreSQL 服务,不要加入 -L,注意 %CD% 的用法
  18. REM 否则事件查看器将变成 Windows 写情书给你的地方
  19. .\bin\pg_ctl register -N PgSQL -U postgres -P [passwd] -D "%CD%/data"

  20. REM 启动刚才建好的服务
  21. net start PgSQL
複製代碼
F、把整个临时目录打包分发,解压后只要运行 setup.bat 就完事大吉

G、有经验的朋友可以在 bat中加入条件判断或者其他标志,我就偷懒了
注:在win2000、winxp、win2003 (ntfs、fat32、远程桌面、中文父文件夹)下通过测试
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Archiver|怕失憶論壇

GMT+8, 2024-4-16 18:58 , Processed in 0.011349 second(s), 11 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.