連接不上數(shù)據(jù)庫(kù)的原因,無(wú)非是psql的安裝和設(shè)置出現(xiàn)問(wèn)題。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)于洪,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
查找相關(guān)答案的時(shí)候要注意,debian和ubuntu下面的安裝和設(shè)置幾乎是一樣的。
請(qǐng)參考下面兩個(gè)材料:
1、ubuntu下的Postgresql安裝設(shè)置。
2、詳解Ubuntu下搭建JSP平臺(tái)過(guò)程,雖然這個(gè)文章是mysql,做為數(shù)據(jù)庫(kù)的設(shè)置,還是大同小異的。
數(shù)據(jù)。下面Navicat官網(wǎng)將詳解Navicat for PostgreSQL表索引。
方法/步驟
在 Navicat for PostgreSQL“索引”選項(xiàng)卡,只需點(diǎn)擊索引欄位即可編輯。使用索引工具欄,便可以創(chuàng)建新的、編輯或刪除選定的索引欄位。
● 添加索引:添加一個(gè)索引到表。
● 刪除索引:刪除已選擇的索引。
2
名編輯框:設(shè)置索引名。沒有模式名可以包含在這里,索引總是創(chuàng)建與它的上級(jí)表相同的模式。要在索引包含欄位,只需簡(jiǎn)單地雙擊欄位或點(diǎn)擊“欄位”按鈕就能在打開的編輯器中編輯。注意:一些欄位類型不容許由多個(gè)欄位索引。
索引方法:下拉列表定義表索引的類型。
3
唯一鍵:使得索引獨(dú)一無(wú)二,當(dāng)創(chuàng)建索引以及每次添加數(shù)據(jù)時(shí),系統(tǒng)檢查表中的重復(fù)值(如果數(shù)據(jù)已經(jīng)存在)。
簇:CLUSTER 指示 PostgreSQL 簇,指定表名和索引名,索引必須已經(jīng)被定義到表名。當(dāng)一個(gè)表被簇,PostgreSQL 記得它被簇到哪個(gè)索引。 CLUSTER 形式表名重新簇表在它之前簇的相同索引。
表空間:創(chuàng)建索引的表空間。
4
限制:如果想創(chuàng)建部分索引,在編輯框輸入限制條件。部分索引是一個(gè)索引包含項(xiàng)目給一個(gè)表的一部分,通常一部分在索引方面較表其余部分更為有用。
注釋:定義索引的注釋。
欄位編輯器:從名列表選擇欄位,也可以使用箭頭按鈕來(lái)改變索引欄位的順序。
5
排序規(guī)則:選擇索引的排序規(guī)則。支持 PostgreSQL 9.1 或以上版本。
排序順序:指定排序順序:ASC 或 DESC。
Nulls 排序:指定 nulls 排序在 non-nulls 前(NULLS FIRST)或后(NULLS LAST)
如果返回一個(gè) 數(shù)字或者字符 比較簡(jiǎn)單,那么多行多列怎么辦呢,分為以下幾種情況【東西很多,這里只做簡(jiǎn)單列舉】
返回多行單列
又分為幾種方式
1. return next,用在 for 循環(huán)中
CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOFvarcharas $$DECLARE? ? v_name varchar;BEGINforv_namein( (selectnamefromtest_result1whereid=in_id)union(selectnamefromtest_result2whereid= in_id) ) loop
RETURNNEXT v_name;
end loop;
return;END;
$$
LANGUAGE PLPGSQL;
注意
1. 循環(huán)外還有個(gè) return
2. 需要實(shí)現(xiàn)聲明 v_name
2. return query,無(wú)需 for 循環(huán)
CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOFvarcharas $$DECLARE? ? v_rec RECORD;BEGINreturnquery? ( (selectnamefromtest_result1whereid=in_id)union(selectnamefromtest_result2whereid= in_id) );
return;END;$$LANGUAGE PLPGSQL;
注意:如果 返回類型為 setof,最好用如下方法
RETURNQUERYEXECUTESQL
不要這么用
executesqlinto? out;returnout;
返回多行多列
也有多種方式
1. 使用 return next 和? setof record ,需要 for 循環(huán)
CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOF RECORDas $$DECLARE? ? v_rec RECORD; BEGINforv_recin( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) )loop
RETURNNEXT v_rec;
end loop;
return;END;
$$
LANGUAGE PLPGSQL;
注意
1. 讀取表的整行數(shù)據(jù)時(shí)才能用 record
2. 如果讀取的數(shù)據(jù)不是整行,需要自定義 復(fù)合數(shù)據(jù)類型,否則會(huì)報(bào)如下錯(cuò)誤
ERROR:? acolumndefinition listisrequiredforfunctions returning "record"
定義復(fù)合類型 ,示例如下
createtype myout2as (
road_num int,
freq bigint);createorreplacefunctiontest(cartext, time1text, time2text)returnssetof myout2as $$declare
array1 text[];
array2 text[];
len1 integer;
len2 integer;
x integer;
y integer;
road_str text;
car_str text;
sql text;
i myout2;
begin-- vin 號(hào)拼接selectregexp_split_to_array(car,',')into array2;
selectarray_length(array2,1)into len2;
car_str :='';
y :=1;
whiley= len2 loop
car_str :=car_str||quote_literal(array2[y])||',';
y :=y+1;
end loop;
-- sql 拼接sql :='select road_number, sum(frequency) from heat_map where date_key = '''|| time1
||'-01'' and date_key ='''|| time2
||'-20'' and vin in ('||rtrim(car_str,',')
||')group by road_number;';
--execute sql into out;foriinexecute sql loop
returnnext i;
end loop;
return;end$$ language plpgsql;
在執(zhí)行時(shí)可能會(huì)報(bào)如下錯(cuò)誤
ERROR:set-valuedfunctioncalledincontext that cannot accept aset
解決方法
select funcname(arg);--改為select*fromfuncname(arg);
2.? return query,無(wú)需 for 循環(huán)
CREATEORREPLACEFUNCTIONfuncname ( in_idinteger)RETURNSSETOF RECORDas $$DECLARE? ? v_rec RECORD;BEGINreturnquery? ( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) );
return;END;
$$
LANGUAGE PLPGSQL;
3. 使用 out 輸出參數(shù)
CREATEORREPLACEFUNCTIONfuncname ( in_idinteger,out o_idinteger,out o_namevarchar)
RETURNSSETOF RECORDas $$DECLARE? ? v_rec RECORD;BEGINforv_recin( (selectid , namefromtest_result1whereid=in_id)union(selectid , namefromtest_result2whereid= in_id) )loop
o_id? := v_rec.id;
o_name := v_rec.name;
RETURNNEXT ;
end loop;
return;END;
$$
LANGUAGE PLPGSQL;
總結(jié) - return next return query?
我們可以看到上面無(wú)論是單列多行還是多列多行,都用到了 return next 和 return query 方法
在 plpgsql 中,如果存儲(chǔ)過(guò)程返回 setof sometype,則返回值必須在 return next 或者 return query 中聲明,然后有一個(gè)不帶參數(shù)的 retrun 命令,告訴函數(shù)執(zhí)行完畢;【setof 就意味著 多行】
用法如下
RETURNNEXT expression;RETURN QUERY query;RETURNQUERYEXECUTEcommand-string[ USING expression [, ... ]];
return next 可以用于標(biāo)量和復(fù)合類型數(shù)據(jù);
return query 命令將查詢到的一條結(jié)果追加到函數(shù)的結(jié)果集中;
二者在單一集合返回函數(shù)中自由混合,在這種情況下,結(jié)果將被級(jí)聯(lián)。【有待研究】
return query execute 是 return query 的變形,它指定 sql 將被動(dòng)態(tài)執(zhí)行;
returnqueryselectroad_number,sum(frequency)fromheat_mapgroupbyroad_number;--這樣可以sql :='select road_number, sum(frequency) from heat_map group by road_number';returnquery sql;--這樣不行
參考資料:
自定義類型并返回?cái)?shù)組
return next return query
function返回多列多行
返回結(jié)果集多列和單列的例子??
PostgreSQL存儲(chǔ)過(guò)程(1)-基于SQL的存儲(chǔ)過(guò)程
動(dòng)態(tài)SQL
postgresql, pgadmin error RETURN cannot have a parameter in function returning set
存儲(chǔ)過(guò)程輸出參數(shù)
PostgreSQL存儲(chǔ)過(guò)程(3)-流程控制語(yǔ)句
啟動(dòng)pg服務(wù)
設(shè)置pg服務(wù)為開機(jī)啟動(dòng)
-bash: netstat: 未找到命令
再次執(zhí)行
使用navicat連接是無(wú)法連接的。
【遇到的問(wèn)題】若沒有可以跳過(guò)
【解決辦法】
修改/usr/bin/firewall-cmd 下文件在首行 python改為python2(因?yàn)橹鞍惭b過(guò)python3環(huán)境)
listen_addresses='*'
或者加 ip網(wǎng)段
配置完成后即可使用客戶端進(jìn)行連接
大功告成~~
————————————————
參考 鏈接:
文章題目:包含postgresql詳解的詞條
URL分享:http://m.rwnh.cn/article36/dsdhepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、全網(wǎng)營(yíng)銷推廣、網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、App開發(fā)
聲明:本網(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)