“p偶四t g瑞e 噻噎k野u”
10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先建設(shè)網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有涇縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
唉,,,,用文字表示聲音,真難。
在PostgreSQL中并沒(méi)有CREATE TABLE權(quán)限名稱,這是與其它數(shù)據(jù)庫(kù)不同的一個(gè)地方,PostgreSQL是通過(guò)控制是否在模式schema中上有CREATE控制用戶的能否創(chuàng)建表的權(quán)限的,默認(rèn)安裝下,任何用戶都有在模式public中CREATE的權(quán)限,所以要?jiǎng)?chuàng)建只讀賬號(hào)的第一步,我們要先去除在模式public中的CREATE權(quán)限:
REVOKE CREATE ON SCHEMA public from public;
下面的SQL創(chuàng)建了一個(gè)名為“readonly”的用戶:
CREATE USER readonly with password 'query';
然后把現(xiàn)有的所有在public這個(gè)schema下的表的SELECT權(quán)限賦給用戶readonly,執(zhí)行下面的SQL命令:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
上面的SQL命令只把現(xiàn)有的表的權(quán)限給了用戶readonly,但如果這之后創(chuàng)建的表,readonly用戶還是不能讀,需要使用下面的SQL把以后創(chuàng)建的表的SELECT權(quán)限也給用戶readonly:
PostgreSQL中的bytea字段類型可以以二進(jìn)制的形式存儲(chǔ)數(shù)據(jù),這樣做的好處就是可以將原本存儲(chǔ)在網(wǎng)站目錄下的文件存儲(chǔ)到數(shù)據(jù)庫(kù)中,壞處就是如果文件過(guò)多、過(guò)大的話,就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的數(shù)據(jù)量大大增加,備份和恢復(fù)的時(shí)候就會(huì)浪費(fèi)大量的時(shí)間,而且數(shù)據(jù)也有可能會(huì)出錯(cuò)。個(gè)人覺(jué)得,在文件量小的情況下,使用這種存儲(chǔ)方式還是很方便的。
言歸正傳,下面介紹一下使用bytea字段存讀取文件的具體實(shí)現(xiàn)方法。首先是文件存儲(chǔ)于存儲(chǔ)于bytea字段的方法,主要用到的就是PHP中的pg_escape_bytea方法,代碼如下:
?php
$dbconn = pg_connect("host='localhost' dbname='dbname' user='user' password='password' port='port'")
OR DIE('Could not connect:' . pg_last_error());
$fileUrl = iconv("utf-8", "gbk", $fileUrl);//$fileName為文件路徑地址,漢字可能會(huì)亂碼,此處處理一下
$fileContents = file_get_contents($fileUrl);
$escapeBytea = pg_escape_bytea($fileContents);//轉(zhuǎn)義bytea數(shù)據(jù)類型的二進(jìn)制字符串
$insertStr = "INSERT INTO tableName(id, contents)
VALUES(DEFAULT, '{$escapeBytea}')";
pg_query($dbconn, $insertStr);
?
從bytea字段中還原文件用到的是PHP中的pg_unescape_bytea方法,實(shí)現(xiàn)代碼如下:
?php
$dbconn = pg_connect("host='localhost' dbname='dbname' user='user' password='password' port='port'")
OR DIE('Could not connect: ' . pg_last_error());
$selectStr = "SELECT contents
FROM tableName
WHERE id = " . $fileId;//$fileId為文件id
$query = pg_query($dbconn, $selectStr);
while($row = pg_fetch_array($query, null, PGSQL_ASSOC)){
$escapeBytea = $row['contents'];
$fileContents = pg_unescape_bytea($escapeBytea); //獲得二進(jìn)制數(shù)據(jù)
file_put_contents($fileName, $fileContents); //$fileName為帶有后綴名的文件名,如hello.pdf
}
?
導(dǎo)出文件后,如果二進(jìn)制數(shù)據(jù)轉(zhuǎn)碼錯(cuò)誤就會(huì)出現(xiàn)文件打不開(kāi)的現(xiàn)象,比如錯(cuò)誤的PDF文件打開(kāi)時(shí)彈出錯(cuò)誤如下圖:
這種錯(cuò)誤在數(shù)據(jù)庫(kù)遷移時(shí)特別容易出現(xiàn)(本人是從PostgreSQL 8.4遷移到9.1),解決的方法是修改PostgreSQL的配置文件
postgresql.conf,將bytea_output的輸出類型設(shè)置為轉(zhuǎn)義類型(escape)輸出,即bytea_output = 'escape'(如果前面有#,刪除開(kāi)啟配置),然后reload一下PostgreSQL的配置使修改生效,這樣二進(jìn)制數(shù)據(jù)就可以正常解碼并輸出到文件。
PostgreSQL
是一個(gè)自由的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)服務(wù)器(數(shù)據(jù)庫(kù)管理系統(tǒng)),它在靈活的 BSD-風(fēng)格許可證下發(fā)行。它提供了相對(duì)其他開(kāi)放源代碼數(shù)據(jù)庫(kù)系統(tǒng)(比如
MySQL 和 Firebird),和專有系統(tǒng)(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL
Server)之外的另一種選擇。
PostgreSQL 不尋常的名字導(dǎo)致一些讀者停下來(lái)嘗試拼讀它,特別是那些把SQL拼讀為"sequel"的人。PostgreSQL 開(kāi)發(fā)者把它拼讀為 "post-gress-Q-L"。它也經(jīng)常被簡(jiǎn)略念為 "postgres"。
PostgreSQL(數(shù)據(jù)庫(kù))資料
About:PostgreSQL About
《PostgreSQL 源碼分析系列》
PostgreSQL 源碼分析系列
介紹:PostgreSQL 源碼分析系列文章
《PG 內(nèi)存上下文》
介紹:PG 內(nèi)存上下文,code
《PostgreSQL及其代碼的結(jié)構(gòu)》
介紹:PostgreSQL及其代碼的結(jié)構(gòu)
《A Tour of PostgreSQL Internals》
介紹:PostgreSQL內(nèi)部的概覽,可以結(jié)合上面的pg代碼結(jié)構(gòu)來(lái)閱讀
《PostgreSQL 中的 Json —從使用到源碼》
介紹:PostgreSQL 中的 Json —從使用到源碼
《PostgreSQL鎖機(jī)制分析》
我也得上線才能看到問(wèn)題吧…………排前十用query就行了SELECT TOP 10 FROM 表 WHERE 篩選字段='要求' ORDER BY 排序字段OleDbConnection conn = new OleDbConnection(connectionString);OleDbCommand comm = new OleDbCommand(conn, query);conn.Open(); //這句經(jīng)常忘,剛剛就忘了OleDbDataReader dr = comm.Excute();while(dr.read()){ Console.Writeline(dr("字段名").ToString()); //想怎么輸出就怎么輸出 }conn.Close();//這句也經(jīng)常忘,剛剛也給忘了
分享題目:postgresql讀的簡(jiǎn)單介紹
鏈接分享:http://m.rwnh.cn/article40/dscooho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、虛擬主機(jī)、定制網(wǎng)站、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)