各位有遇過這個PG-Bytea的問題嗎 |
答題得分者是:multics
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
各位大大:
小弟這幾個星期都在玩Blob存資料庫的問題。小弟試過MSSQL及 Access均很順利,可是試到PostgreSQL時就老是出狀況。小弟是一個個克服過來,可是最近又碰到了牆了。 小弟用PostgreSQL-Bytea存BlobDAta,如mdb/mp3/jpg/doc等檔案,小弟試了好幾天,是可以存進去,可是轉出來時老是無法使用,經研究發現它的體積會自動長大,且會以3.31的比率增加。這轉出來檔當然是不能用了。而且我用BlobField.BolbSize去看資料庫中的存檔大小就是這個轉出的Size,這表示是在存入時出了問題。這要如何處理?各位有類似的經驗嗎?
------
Kevin |
multics
一般會員 發表:0 回覆:6 積分:11 註冊:2007-01-21 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
multics
一般會員 發表:0 回覆:6 積分:11 註冊:2007-01-21 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
太感謝老哥了,果然可以了。小弟昨晚照老哥講的試了幾台電腦,均OK 了。小弟以新寫的可以在MSSQL/Access上順利執行的八千行Blob資料處理的函式來試用在PostgreSQL上,完全正常,加密解密壓縮解壓縮存入轉出,通通OK。花了我三四個星期砍了舊版內一萬五千行程式碼,及新寫了八千行新程式碼,逐個測試,竟全部過關。太感謝,太感謝了。
小弟原先處理Delphi-postgresqlODBC-bytea-BlobFieldType老是型態不合的問題時,也照前輩講的設了escpae_string_warning而將前述問題解決了,但一時手賤竟將內定為off的standard_conforming_strings給改為on了。難怪我到處找資料及翻江倒海的試,老是試不出來。原來是自己手賤。 哈!哈!哈!問題解決了。 小弟叩謝。 哈!哈!哈!問題解決了。
------
Kevin |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
multics
一般會員 發表:0 回覆:6 積分:11 註冊:2007-01-21 發送簡訊給我 |
To Kevin2004兄:
小事情,你太客氣了,只是順手幫一下而已。現在玩PostgreSQL的人不多,能幫忙,當然要幫一下。講到PG,以往還有個資庫網及基哥的Delphi俱樂部,可以讓同好們在一起討論一下,現在想要找個地方聊一下PG都很難了。 今天白天忙一整天,晚上因為又一個用pg的客戶DB滿5G,大家才出去吃個飯慶祝一下。回到家理才看到你的回文。 你太客氣了。 公司裏有用Bytea管合約資料客戶資料及客服系維記錄等,也有一些類似功能的系統在運作。你碰過的問題,我們當初也多碰到過,只是分享一下經驗而矣。 恭喜你了。
------
Multics |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
抱歉了,今天才回。
我略過不談Fedora的環境,那變數太多,不如講Win-PG。Win-PG-8.X真是超好簡單的,只要幾個點作對了,保證一點即通。 我用的版本是: 1.PostgreSQL-Win-8.2.1-1 2.pgsqlODBC-Win--08_02_0200 3.pgAdmin1.62﹝這不必特殊去抓及裝,只要你的PostgreSQL裝好了,它就有了﹞ // 如果你有興趣,另裝Apache PHPpgAdmin也是很不錯的 4.Windows:至少要2K/XP以上。因為Win0-PG需要用到NTFS的保全功能,所以檔案系統須要NTFS,FAT32是不可以裝的。 5.Delphi:我現還在用 D7,我還沒移上來。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
整個程序如下:
1.先將舊的Win-pg資料庫備份出來,將舊的設定先備一份及印出來。 2.UnInst-舊Win-PG 3.將舊的pgsqlODBC-DSN內容先記下來再先殺掉。不先殺這些DSN,等下移除了舊版的psqlODBC要再來殺這些時會殺不掉的。。移除舊的pgsqlODBC。 4.先去下載:postgresql-8.2.1-1﹝zip﹞,解壓縮到硬碟某個目錄,執行已解開的postgresql-8.2-int。這時除了一個地方外﹝見後﹞,其餘大都是按Enter即可。 5.設定控制檔﹝見後﹞啟動WinPG,及容許外機聯接。 6.下載:psqlodbc-08_02_0200,解壓縮後點已壓出的psqlODBC進行Driver安裝。 7.設Win-PG環境與控制設訂,開Win-PG資料庫,建User與群組。如果方便的話,將線上手冊印出來看看吧,篇幅不少,可是會省你以後很多事。資料庫可只開個頭就好了,等會建好ODBC及以AP聯上來後,再叫AP建之。或由Win-PG8.0舊DB移回來均可。Win-PG在8.X以前須要用到CygWin,不好用,我沒作過7.X版的DB還原經驗。 7.設各AP的psqlODBC-DSN:這是成敗關鍵。psqlODBC在8.0.2與8.0的設定有點不同,小弟去天瓏查原文書在那看了好幾鐘頭,光是ODBC設定就有一整章42頁。這裏如果沒設好,會有問題的。想當年初玩PG時,光是要設這個聯PG就花了我好幾個月的時間,天天愁雲慘霧,希望渺茫。不過,等下,各位照我講的設就可以了,保證三下兩下輕鬆攪定。 小弟要先出門上班了。回來再續,抱歉了。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
小弟這兩天又碰到鬼了,在客戶那裝幾台FedoraServer竟然多數都出問題了。平常裝了N台也沒遇到過,真氣死人了。
還是回頭來將這篇寫完吧。 小弟今天找了一台乾淨的電腦重新Win-PG-8.2及psqlODBC。將設訂記如下: 主題:在WindowS-2K/XP-NTFS上裝PostgreSQL8.2 0.如有舊的Win-PG,我是先UnInst它。 1.下載解開後,執行postgresql--8.2.msi 2.以下多只是按Enter就可以了,簡單的簡直是設計給給白癡用的。 3.要設定postgres的密碼。這個User會被自動加到你的電腦的User中。 4.Encoding內定是SQL_ASCII,這將會是你將來開新資料庫時的內定編碼值﹝但仍可選﹞。我順手會將它改為UTF-8,以免將來開資料庫時忘了改了,就麻煩了。 5.Enable Contrib modules這巷不要改它,將來如要新加時,還可以再加。這裏別理它。 以上幾乎全是按Enter就好了。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
續上。
主題:啟用Win-PG8.2及建資料庫與加User。 0.在Win-PG8.0與8.2不同之處,是於8.0時,你還要加個Group,在8.2則只要加User即好了。 1.先進網路芳鄰,查看這台PC的IP。因為這是PG-Server所在的PC,所以IP不可設為動態取得。需為固定者。記下這個IP值,等下你會用到它。 2.進PGAdmin1.62。程式集->postgresql8.2->PgAdmin。這時會問你密碼,就是你在安裝時給的那個值啦。記得輸密碼時,萬萬不可句選它的上方『記住密碼』的CheckBox,你句了以後,你的PG就沒密碼保護了,就是不設防的啦。 3.加個User,將超級用護、允許建新用戶、允許建資料庫物件、能修改分類目錄等均勾起來。其它的就不用管它了。 4.開個新資料庫,右點資料庫那項,選開新資料庫。設資料庫名字、Owner為你剛加的那個傢伙、編碼我都是設為UTF-8
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
續上。
主題:裝psqlODBC8.2及設新ODBC-DSN 0.如有舊psqlODBC8.0及相關的DSN,記得先砍DSN再移除psqlODBC8 1.下載,解壓縮,執行安裝... 2.加ODBC-DSN,系統管理工具->ODBC,在系統資料來源那頁加新的ODBC-DSN。別加錯了,是系統資料來源頁。 3.Add,可選postgresql-Ansi或另一個Postgresql-???﹝身邊幾台電腦都在裝Fedora,沒法查﹞均可。我多設為postgresql-ANSI。我試過選那個好像都沒關係,而且隨時可以在DSN重設回來。 4.DataSource﹝此DSN-name,如AccountDB_PG﹞ DataBase﹝如AccountDB﹞ Server﹝就是它所在PC的ip啦﹞ Port﹝5432,這個不要動它﹞ User﹝就是你剛才在PgAdmin加的那個傢伙啦。這個也可以不設,可直接由你的AP給就好了﹞ PassWord﹝這也讓他空下來﹞ 5.點DataSource-BitBtn:選Page2,千萬記得將bytea as lo要勾起來。在PG中的bytea-fieldtype,就是你在MSSQL/Oracle/MySQL/Access中的那個Blob欄。bytea上限是1GB,可不要拿M$等的兩G或四G來對Bytea嗤之以鼻。老實說1G真是已很夠用了。如果一個檔壓縮了以後還大過一G,那它鐵定不適合放放在資料庫中。通常一個二、三十頁的合約書DOC檔壓後至多也只剩二、三十K了。可別銹斗玩起NG來。lo在pg就是舊的larget object,這是可以大過一G的,不過這要搭配OID來用,想想要超過1G,小弟就敬謝不敏了。 6.其餘的ODBC-DSN設定就用內定值,為省篇幅,小弟就不多說了。 存起來就好了。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
續上。
主題:設定可以處理Bytea-Blob存取BinaryData的功能 1.編修postgresql.conf:程式集->PostgreSQL8.2->編修控制檔->edit postgresql.conf。 2.改Connections and Authentication-section,加 listen_addresses = '*' 3.改Version/platform Compatibility加兩行 escape_string_warning = off standard_conforming_strings = off 別小看這三行,小弟這三行可是花了三四個星期,把手冊全印出來裝釘研讀多次,還去PG姥姥家及Google翻江倒海了好久,最後還是靠Multics前輩指點才過關的。 真是眾裏尋它千百度,衣帶漸寬終不悔,再回頭已百年身。烏乎哀哉。
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |