我的家園

          我的家園

          環(huán)境搭建:

          1. VS2005(完全安裝, 要用VC8), (VS2008用來編譯也是可以的,但是最后的工程文件還是VS2005的)
          2. Active Perl5.8后續(xù)版本,確保perl\bin在PATH環(huán)境變量里頭
          3. Bison 和 Flex
             Bison 1.875 或者 2.2或以后版本才有效. 
             Flex必須是2.5.31或后續(xù)版本, 請參照一下:http://www.postgresql.org/ftp/misc/winflex/
             如果是從release的source code里build, 這兩個工具,可以不要。如果是從git里頭取的code,則需要這兩個工具。
          4. source code:  http://www.postgresql.org/ftp/source/v9.1.3/
          5. Diff, gettext等,連同Bison,從GnuWin32里頭下載。http://gnuwin32.sourceforge.net/packages.html


          至于:6. MIT Kerberos  (Kerberos authentication support)
          7. libxml2 and libxslt
          8. openssl
          9. ossp-uuid
          10. zlib   
          11. Python

          這些都是可選的,不是必需的。

          如果只是build這些選項,甚至包括一些開發(fā)包,這里有一個編譯打包好的。下載地址: http://code.google.com/p/hisql/downloads/list。這個包是免安裝版。
          里邊已經(jīng)放置了odbc, jdbc, ado.net包以及pgAdmin客戶端。

          1) 解壓源碼至E:\PROJECTS\postgresql-9.1.3

          2 ) 假設(shè)VS2005安裝到:D:\tools\vs8, 進(jìn)入cmd窗口:運行D:\tools\vs8\vc\bin\vcvars32.bat,以得到所有有用的VC編譯器環(huán)境變量。
          進(jìn)入目錄:E:\PROJECTS\postgresql-9.1.3\src\tools\msvc

          3) 運行build.bat  DEBUG >> \build.log
          4) 檢查沒什么錯誤(0 errors)之后,運行install.bat  E:\PROJECTS\pgsql_debug,將build出來之后的東西安裝到此位置。

          5) 在pgsql_debug目錄下邊設(shè)置簡單的幾個環(huán)境變量pg_env.bat, 并運行之:

          @ECHO OFF
          REM The script sets environment variables helpful for PostgreSQL
          SET PGHOME=E:\PROJECTS\pgsql_debug
          SET PATH=%PGHOME%\bin;%PATH%
          SET PGDATA=%PGHOME%\data
          SET PGLOCALEDIR=%PGHOME%\share\locale

          6) 運行下邊命令建立數(shù)據(jù)目錄:

          initdb --no-locale -E UTF-8 -D E:\PROJECTS\pgsql_debug\data

          7) 啟動server進(jìn)程并創(chuàng)建db,
          pg_ctl -l pgsql.log start

          createdb iihero

          8) 連接db:
          psql iihero

          iihero=# create table foo2(id bigint);
          CREATE TABLE
          iihero=# select pg_backend_pid();
                    10804
          9) 
          ////// 此時知道該連接對應(yīng)的后臺進(jìn)程ID是10804,用VS2005打開plsql.sln,attach到此進(jìn)程,
          ////// 找到postmaster工程,src/backend/tcop/postgres.c, 在exec_simple_query()處設(shè)斷點,就可以跟蹤普通的SQL操作在后臺的執(zhí)行情況,此處不綴述。
          10) 插入大批量的數(shù)據(jù)作測試
          iihero=# insert into foo2 select * from generate_series(1, 1000000);
          INSERT 0 1000000

          11)
          后臺進(jìn)程postgres.exe,一啟動就有6個。除了用psql連接導(dǎo)致的新postgres進(jìn)程以外,這個好判斷,用select pg_backend_pid()就可以得到進(jìn)程號,準(zhǔn)確進(jìn)行attach。

          那么如果想跟蹤其它幾個后臺進(jìn)程呢?
          總共就這些后臺進(jìn)程:(SysLogger, BgWriter, WalWriter, AutoVacuum, PgArch, PgStat),名字都叫postgres。
          我們注意到src/backend/postmaster/*.c里頭,剛好有對應(yīng)這6個進(jìn)程的實現(xiàn)部分。
          使用VS debugger的suspend,再加上對這幾個文件進(jìn)行試設(shè)斷點,也是可以的。如果仔細(xì)比對源碼,看看postmaster.c中的SubPostmasterMain():


          不難發(fā)現(xiàn),
          SysLogger    -->    --forklog
          AutoVacuum --> --forkavworker, --forkavlauncher
          WalWriter, BgWriter --> --forkboot
          PgStat      --> --forkcol
          PgArch    -->  --forkarch

          使用ProcessExplorer工具,從postgres.exe的進(jìn)程屬性即可以看出對應(yīng)的是哪個后臺進(jìn)程。 如下圖所示:

          找到src/backend/postmaster/pgarch.c,選擇適當(dāng)?shù)臄帱c,即可進(jìn)行跟蹤了。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 林甸县| 墨脱县| 平昌县| 凌海市| 朝阳县| 丹寨县| 新泰市| 雅安市| 中宁县| 行唐县| 石城县| 鹤峰县| 温宿县| 芷江| 绥棱县| 安徽省| 虞城县| 蓬溪县| 华蓥市| 武威市| 白河县| 彭阳县| 镇康县| 梁平县| 海阳市| 杭锦旗| 宕昌县| 巩义市| 越西县| 罗田县| 宣城市| 无极县| 蕉岭县| 永定县| 银川市| 湖北省| 左权县| 三门峡市| 应用必备| 临沭县| 武山县|