PostgreSQL有pldbgapi擴展,先安裝此擴展。
首先,需要將debug的模組載入到PostgreSQL伺服器中去。做法是: 在pgAdminIII中以管理員登錄,然後選擇菜單「工具->伺服器配置->postgresql.conf」,
當然,最常用的調試方式就是自己直接調用函數來查看執行結果是否正確。
2. pgSql里運行sql語句沒錯,但在JFinal報錯
PostgreSQL的PL/pgSQL語言是支持動態SQL語句的(說execute immediate的是ECPG所支持的)。但是,要記得重要的一點: 是在PL/pgSQL語言中支持。而PL/pgSQL語言一個塊結構的語言,它以begin ... end為塊的開始與結束標識。這也就是說,要執行動態SQL語句,就必須放到begin ... end塊中,而不要想實現一個單獨的動態SQL語句。在SQL Server中,倒是可以輕松的實現,我們可以直接執行一個這樣的動態SQL:
1execute sp_executesql N'select 1 as val'
而在PostgreSQL中,就不要有此想法了。當然,SQL Server的這種動態SQL語句的執行方法也有其局限與不便的地方。
在PL/pgSQL中,執行動態SQL的格式如下(摘錄自說明文檔):
1EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];
其中,
command-string就是要執行的動態SQL語句(一定要記住:這里是SQL語句,不是PL/pgSQL語句,像raise notice就不能使用);
INTO子句是把SQL查詢到的值賦給INTO指定的變數;
USING子句是前面的command-string中替代變數($1, $2, ...)的賦值;
示例:
123456789do $$declarev_c1 integer;v_c2 integer;beginexecute 'select count(*) as c1, count(*) as c2 from (select 1 as idx union select 11 as idx union select 21 as idx) s where idx > $1' into v_c1, v_c2using 10;raise notice '%, %', v_c1, v_c2;
3. 如何查看PostgreSQL正在執行的SQL
1、首先登錄sql server managment。
4. PostgreSQL 動態SQL語句怎麼寫
PostgreSQL的PL/pgSQL語言是支持動態SQL語句的(說execute immediate的是ECPG所支持的)。但是,要記得重要的一點: 是在PL/pgSQL語言中支持。而PL/pgSQL語言一個塊結構的語言,它以begin ... end為塊的開始與結束標識。這也就是說,要執行動態SQL語句,就必須放到begin ... end塊中,而不要想實現一個單獨的動態SQL語句。在SQL Server中,倒是可以輕松的實現,我們可以直接執行一個這樣的動態SQL:
executesp_executesqlN'select1asval'
而在PostgreSQL中,就不要有此想法了。當然,SQL Server的這種動態SQL語句的執行方法也有其局限與不便的地方。
在PL/pgSQL中,執行動態SQL的格式如下(摘錄自說明文檔):
EXECUTEcommand-string[INTO[STRICT]target][USINGexpression[,...]];
其中,
command-string就是要執行的動態SQL語句(一定要記住:這里是SQL語句,不是PL/pgSQL語句,像raise notice就不能使用);
INTO子句是把SQL查詢到的值賦給INTO指定的變數;
USING子句是前面的command-string中替代變數($1, $2, ...)的賦值;
示例:
do$$
declare
v_c1integer;
v_c2integer;
begin
execute'selectcount(*)asc1,count(*)asc2from()swhereidx>$1'
intov_c1,v_c2
using10;
raisenotice'%,%',v_c1,v_c2;
5. postgresql如何執行sql文件
在pgAdmin的窗口中,直接打開SQL文件然後執行就可以了。
你所說的Oracle的執行方式,應該是在sql plus命令窗口中執行sql文件。這個功能在PostgreSQL的命令窗口psql中也有此功能:開啟psql命令窗口之後,執行命令:
isqlfile_path
就可以執行指定的sql文件了, 其中sqlfile_path是要執行的sql文件, 如下圖,
要注意的是: 在Windows系統中,路徑中用的是斜杠,不是反斜杠。
6. pgsql使用函數調用和直接使用sql對數據表進行修改有何區別
在SQL server中視圖僅僅是SQL的映射,它一般事不含有程序運算,僅用於查詢。 自定義函數是程序塊,它支持參數,並且返回類型多樣化。
資料庫一般提供數據存儲的作用,業務邏輯運算卻由其它應用程序處理,例如JAVA。如果業務邏輯比較復雜而且高度依賴資料庫里的各種數據,這樣JAVA與資料庫之間可能需要通訊多次,才可以把流程完成。這樣無疑會產生交互的時間,所以如果把復雜的運算直接讓資料庫中計算出來,那效率就會相當高,所以就有了自定義函數。
7. pgsql如何讓表id自動增長
在創建表的時候可以設置,方法如下,用一下sql語句。
create table tableName(
id int identity(1,1) primary key,
data varchar(50))
解釋:其中identity(1,1)代表自增,第一個1代表從1開始計數,第二個1代表每次增長1。
8. postgressql數據源怎麼配置
PostgresSQL提供了許多資料庫配置參數,本章將介紹每個參數的作用和如何配置每一個參數。
10.1 如何設置資料庫參數
所有的參數的名稱都是不區分大小寫的。每個參數的取值是布爾型、整型、浮點型和字元串型這四種類型中的一個,分別用boolean
、integer、 floating point和string表示。布爾型的值可以寫成ON、OFF、 TRUE、 FALSE、 YES、 NO、 1和 0,而且不區分大小
寫。
有些參數用來配置內存大小和時間值。內存大小的單位可以是KB、MB和GB。時間的單位可以是毫秒、秒、分鍾、小時和天。用ms表示
毫秒,用s表示秒,用 min表示分鍾,用h表示小時,用d表示天。表示內存大小和時間值的參數參數都有一個默認的單位,如果用戶
在設置參數的值時沒有指定單位,則以參數默認的 單位為准。例如,參數shared_buffers表示數據緩沖區的大小,它的默認單位是
數據塊的個數,如果把它的值設成8,因為每個數據塊的大小是 8KB,則數據緩沖區的大小是8*8=64KB,如果將它的值設成128MB,
則數據緩沖區的大小是128MB。參數vacuum_cost_delay 的默認單位是毫秒,如果把它的值設成10,則它的值是10毫秒,如果把它的
值設成100s,則它的值是100秒。
所有的參數都放在文件 postgresql.conf中,下面是一個文件實例:
#這是注釋
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
每一行只能指定一個參數,空格和空白行都會被忽略。「 #」表示注釋,注釋信息不用單獨佔一行,可以出現在配置文件的任何地方
。如果參數的值不是簡單的標識符和數字,應該用單引號引起來。如果參數的值中有單引號,應該寫兩個單引號,或者在單引號前面
加一個反斜杠。
一個配置文件也可以包含其它配置文件,使用include指令能夠達到這個目的,例如,假設postgresql.conf文件中有下面一行:
include 『my.confg』
文件my.config中的配置信息也會被資料庫讀入。include指令指定的配置文件也可以用include指令再包含其它配置文件。如果
include指令中指定的文件名不是絕對路徑,資料庫會在postgresql.conf文件所在的目錄下查找這個文件。
用戶也可以在資料庫啟動以後修改postgresql.conf配置文件,使用命令pg_ctl reload來通知資料庫重新讀取配置文件。注意,有些
參數在資料庫啟動以後,不能被修改,只有重新啟動資料庫以後,新的參數值才能生效。另外一些參數可 以在資料庫運行過程中被
修改而且新的值可以立即生效。所以資料庫在運行過程中重新讀取參數配置文件以後,不是所有的參數都會被賦給新的值。
用戶可以在自己建立的會話中執行命令SET修改某些配置參數的值(注意不是全部參數),例如:
SET ENABLE_SEQSCAN TO OFF;
另外,有些參數只有資料庫超級用戶才能使用SET命令修改它們。用戶可以在psql中執行命令show來查看所有的資料庫參數的當前值
。例如:
(1)show all; --查看所有資料庫參數的值
(2)show search_path; --查看參數search_path的值
10.2 連接與認證
10.2.1 連接設置
listen_addresses (string)
這個參數只有在啟動資料庫時,才能被設置。它指定資料庫用來監聽客戶端連接的TCP/IP地址。默認是值是* ,表示資料庫在啟動以
後將在運行數據的機器上的所有的IP地址上監聽用戶請求(如果機器只有一個網卡,只有一個IP地址,有多個網卡的機器有多個 IP
地址)。可以寫成機器的名字,也可以寫成IP地址,不同的值用逗號分開,例如,』server01』, 』140.87.171.49, 140.87.171.21
』。如果被設成localhost,表示資料庫只能接受本地的客戶端連接請求,不能接受遠程的客戶端連接請求。
port (integer)
這個參數只有在啟動資料庫時,才能被設置。它指定資料庫監聽戶端連接的TCP埠。默認值是5432。
max_connections (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定資料庫可以同時建立的最大的客戶端連接的數目。默認值是100。
superuser_reserved_connections (integer)
這個參數只有在啟動資料庫時,才能被設置。它表示預留給超級用戶的資料庫連接數目。它的值必須小於max_connections。 普通用
戶可以在資料庫中建立的最大的並發連接的數目是max_connections- superuser_reserved_connections, 默認值是3。
unix_socket_group (string)
這個參數只有在啟動資料庫時,才能被設置。設置Unix-domain socket所在的操作系統用戶組。默認值是空串,用啟動資料庫的操作
系統用戶所在的組作為Unix-domain socket的用戶組。
unix_socket_permissions (integer)
這個參數只有在啟動資料庫時,才能被設置。它設置Unix-domain socket的訪問許可權,格式與操作系統的文件訪問許可權是一樣的。默
認值是0770,表示任何操作系統用戶都能訪問Unix-domain socket。可以設為0770(所有Unix-domain socket文件的所有者所在的組
包含的用戶都能訪問)和0700(只有Unix-domain socket文件的所有者才能訪問)。對於Unix-domain socket,只有寫許可權才有意義,
讀和執行許可權是沒有意義的。
tcp_keepalives_idle (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPIDLE屬性。這個參數對於
通過Unix-domain socket建立的資料庫連接沒有任何影響。
tcp_keepalives_interval (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPINTVL屬性。這個參數對
於通過Unix-domain socket建立的資料庫連接沒有任何影響。
tcp_keepalives_count (integer)
這個參數可以在任何時候被設置。默認值是0,意思是使用操作系統的默認值。它設置TCP套接字的TCP_KEEPCNT屬性。這個參數對於
通過Unix-domain socket建立的資料庫連接沒有任何影響。
10.2.2. 安全與認證
authentication_timeout (integer)
這個參數只能在postgresql.conf文件中被設置,它指定一個時間長度,在這個時間長度內,必須完成客戶端認證操作,否則客戶端
連接請求將被拒絕。它可以阻止某些客戶端進行認證時長時間佔用資料庫連接。單位是秒,默認值是60。
ssl (boolean)
這個參數只有在啟動資料庫時,才能被設置。決定資料庫是否接受SSL連接。默認值是off。
ssl_ciphers (string)
指定可以使用的SSL加密演算法。查看操作系統關於openssl的用戶手冊可以得到完整的加密演算法列表(執行命令openssl ciphers –v
也可以得到)。
10.3 資源消耗
10.3.1 內存
shared_buffers (integer)
這個參數只有在啟動資料庫時,才能被設置。它表示數據緩沖區中的數據塊的個數,每個數據塊的大小是8KB。數據緩沖區位於數據
庫的共享內存中,它越大越好,不能小於128KB。默認值是1024。
temp_buffers (integer)
這個參數可以在任何時候被設置。默認值是8MB。它決定存放臨時表的數據緩沖區中的數據塊的個數,每個數據塊的大小是8KB。臨時
表緩沖區存放在每個資料庫進程的私有內存中,而不是存放在資料庫的共享內存中。默認值是1024。
max_prepared_transactions (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定能夠同時處於prepared狀態的事務的最大數目(參考PREPARE TRANSACTION命令
)。如果它的值被設為0。則將資料庫將關閉prepared事務的特性。它的值通常應該和max_connections的值 一樣大。默認值是5。
work_mem (integer)
這個參數可以在任何時候被設置。它決定資料庫的排序操作和哈希表使用的內存緩沖區的大小。如何work_mem指定的內存被耗盡,數
據庫將使用磁碟文件進 行完成操作,速度會慢很多。ORDER BY、DISTINCT和merge連接會使用排序操作。哈希表在Hash連接、hash聚
集函數和用哈希表來處理IN謂詞中的子查詢中被使用。單位是 KB,默認值是1024。
maintenance_work_mem (integer)
這個參數可以在任何時候被設置。它決定資料庫的維護操作使用的內存空間的大小。資料庫的維護操作包括VACUUM、CREATE INDEX和
ALTER TABLE ADD FOREIGN KEY等操作。 maintenance_work_mem的值如果比較大,通常可以縮短VACUUM資料庫和從mp文件中恢復數
據庫需要的時間。 maintenance_work_mem存放在每個資料庫進程的私有內存中,而不是存放在資料庫的共享內存中。單位是KB,默
認值是16384。
max_stack_depth (integer)
這個參數可以在任何時候被設置,但只有資料庫超級用戶才能修改它。它決定一個資料庫進程在運行時的STACK所佔的空間的最大值
。資料庫進程在運行時,會 自動檢查自己的STACK大小是否超過max_stack_depth,如果超過,會自動終止當前事務。這個值應該比
操作系統設置的進程STACK的大小 的上限小1MB。使用操作系統命令「ulimit –s「可以得到操作系統設置的進程STACK的最大值。單
位是KB,默認值是100。
10.3.2 Free Space Map
資料庫的所有可用空間信息都存放在一個叫free space map (FSM)的結構中,它記載數據文件中每個數據塊的可用空間的大小。FSM
中沒有記錄的數據塊,即使有可用空間,也不會系統使用。系統如果需要新的物理存 儲空間,會首先在FSM中查找,如果FSM中沒有
一個數據頁有足夠的可用空間,系統就會自動擴展數據文件。所以,FSM如果太小,會導致系統頻繁地擴展數 據文件,浪費物理存儲
空間。命令VACUUM VERBOSE在執行結束以後,會提示當前的FSM設置是否滿足需要,如果FSM的參數值太小,它會提示增大參數。
FSM存放在資料庫的共享內存中,由於物理內存的限制,FSM不可能跟蹤資料庫的所有的數據文件的所有數據塊的可用空間信息,只能
跟蹤一部分數據塊的可用空間信息。
max_fsm_relations (integer)
這個參數只有在啟動資料庫時,才能被設置。默認值是1000。它決定FSM跟蹤的表和索引的個數的上限。每個表和索引在FSM中佔7個
位元組的存儲空間。
max_fsm_pages (integer)
這個參數只有在啟動資料庫時,才能被設置。它決定FSM中跟蹤的數據塊的個數的上限。initdb在創建資料庫集群時會根據物理內存
的大小決定它的值。每 個數據塊在fsm中佔6個位元組的存儲空間。它的大小不能小於16 * max_fsm_relations。默認值是20000。
10.3.3 內核資源
max_files_per_process (integer)
這個參數只有在啟動資料庫時,才能被設置。他設定每個資料庫進程能夠打開的文件的數目。默認值是1000。
shared_preload_libraries (string)
這個參數只有在啟動資料庫時,才能被設置。它設置資料庫在啟動時要載入的操作系統共享庫文件。如果有多個庫文件,名字用逗號
分開。如果資料庫在啟動時未找到shared_preload_libraries指定的某個庫文件,資料庫將無法啟動。默認值為空串。
10.3.4 垃圾收集
執行VACUUM 和ANALYZE命令時,因為它們會消耗大量的CPU與IO資源,而且執行一次要花很長時間,這樣會干擾系統執行應用程序發
出的SQL命令。為了解決這個 問題,VACUUM 和ANALYZE命令執行一段時間後,系統會暫時終止它們的運行,過一段時間後再繼續執行
這兩個命令。這個特性在默認的情況下是關閉的。將參數 vacuum_cost_delay設為一個非零的正整數就可以打開這個特性。
用戶通常只需要設置參數vacuum_cost_delay和vacuum_cost_limit,其它的參數使用默認值即可。VACUUM 和ANALYZE命令在執行過程
中,系統會計算它們執行消耗的資源,資源的數量用一個正整數表示,如果資源的數量超過 vacuum_cost_limit,則執行命令的進程
會進入睡眠狀態,睡眠的時間長度是是vacuum_cost_delay。 vacuum_cost_limit的值越大,VACUUM 和ANALYZE命令在執行的過程中
,睡眠的次數就越少,反之,vacuum_cost_limit的值越小,VACUUM 和ANALYZE命令在執行的過程中,睡眠的次數就越多。
vacuum_cost_delay (integer)
這個參數可以在任何時候被設置。默認值是0。它決定執行VACUUM 和ANALYZE命令的進程的睡眠時間。單位是微秒。它的值最好是10
的整數,如果不是10的整數,系統會自動將它設為比該值大的並且最接近該值的是10 的倍數的整數。如果值是0,VACUUM 和ANALYZE
命令在執行過程中不會主動進入睡眠狀態,會一直執行下去直到結束。
vacuum_cost_page_hit (integer)
這個參數可以在任何時候被設置。默認值是1。
vacuum_cost_page_miss (integer)
這個參數可以在任何時候被設置。默認值是10。
vacuum_cost_page_dirty (integer)
這個參數可以在任何時候被設置。默認值是20。
vacuum_cost_limit (integer)
這個參數可以在任何時候被設置。默認值是200。
10.3.5 後台寫資料庫進程
後台寫資料庫進程負責將數據緩沖區中的被修改的數據塊(又叫臟數據塊)寫回到資料庫物理文件中。
bgwriter_delay (integer)
這個參數只能在文件postgresql.conf中設置。它決定後台寫資料庫進程的睡眠時間。後台寫資料庫進程每次完成寫數據到物理文件
中的任務以後, 就會睡眠bgwriter_delay指定的時間。 bgwriter_delay的值應該是10的倍數,如果用戶設定的值不是10的倍數,數
據庫會自動將參數的值設為比用戶指定的值大的最接近用戶指定的值 的同時是10的倍數的值。單位是毫秒,默認值是200。
bgwriter_lru_maxpages (integer)
這個參數只能在文件postgresql.conf中設置。默認值是100。後台寫資料庫進程每次寫臟數據塊時,寫到外部文件中的臟數據塊的個
數不能超過 bgwriter_lru_maxpages指定的值。例如,如果它的值是500,則後台寫資料庫進程每次寫到物理文件的數據頁的個數不
能超過500,若 超過,進程將進入睡眠狀態,等下次醒來再執行寫物理文件的任務。如果它的值被設為0, 後台寫資料庫進程將不會
寫任何物理文件(但還會執行檢查點操作)。
bgwriter_lru_multiplier (floating point)
這個參數只能在文件postgresql.conf中設置。默認值是2.0。它決定後台寫資料庫進程每次寫物理文件時,寫到外部文件中的臟數據
塊的個數 (不能超過bgwriter_lru_maxpages指定的值)。一般使用默認值即可,不需要修改這個參數。這個參數的值越大,後台寫
資料庫進程每次寫 的臟數據塊的個數就越多。
10.4 事務日誌
full_page_writes (boolean)
這個參數只能在postgresql.conf文件中被設置。默認值是on。打開這個參數,可以提高資料庫的可靠性,減少數據丟失的概率,但
是會產生過多的事務日誌,降低資料庫的性能。
wal_buffers (integer)
這個參數只有在啟動資料庫時,才能被設置。默認值是8。它指定事務日誌緩沖區中包含的數據塊的個數,每個數據塊的大小是8KB,
所以默認的事務日誌緩沖區的大小是8*8=64KB。事務日誌緩沖區位於資料庫的共享內存中。
wal_writer_delay (integer)
這個參數只能在postgresql.conf文件中被設置。它決定寫事務日誌進程的睡眠時間。WAL進程每次在完成寫事務日誌的任務後,就會
睡眠 wal_writer_delay指定的時間,然後醒來,繼續將新產生的事務日誌從緩沖區寫到WAL文件中。單位是毫秒(millisecond),
默認 值是200。
commit_delay (integer)
這個參數可以在任何時候被設置。它設定事務在發出提交命令以後的睡眠時間,只有在睡眠了commit_delay指定的時間以後,事務產
生的事務日誌才會 被寫到事務日誌文件中,事務才能真正地提交。增大這個參數會增加用戶的等待時間,但是可以讓多個事務被同
時提交,提高系統的性能。如果資料庫中的負載比較 高,而且大部分事務都是更新類型的事務,可以考慮增大這個參數的值。下面
的參數commit_siblings會影響commit_delay是否生效。 默認值是0,單位是微秒(microsecond)。
commit_siblings (integer)
這個參數可以在任何時候被設置。這個參數的值決定參數commit_delay是否生效。假設commit_siblings的值是5,如果一個事務發出
一個提交請求,此時,如果資料庫中正在執行的事務的個數大於或等於5,那麼該事務將睡眠commit_delay指定的時間。如果資料庫
中正在執行的事務 的個數小於5,這個事務將直接提交。默認值是5。
10.5 檢查點
checkpoint_segments (integer)
這個參數只能在postgresql.conf文件中被設置。默認值是3。它影響系統何時啟動一個檢查點操作。如果上次檢查點操作結束以後,
系統產生的事 務日誌文件的個數超過checkpoint_segments的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩
潰以後恢復操作需要的時 間。
checkpoint_timeout (integer)
這個參數只能在postgresql.conf文件中被設置。單位是秒,默認值是300。它影響系統何時啟動一個檢查點操作。如果現在的時間減
去上次檢查 點操作結束的時間超過了checkpoint_timeout的值,系統就會自動啟動一個檢查點操作。增大這個參數會增加資料庫崩
潰以後恢復操作需要的時 間。
checkpoint_completion_target (floating point)
這個參數控制檢查點操作的執行時間。合法的取值在0到1之間,默認值是0.5。不要輕易地改變這個參數的值,使用默認值即可。 這
個參數只能在postgresql.conf文件中被設置。
10.6 歸檔模式
archive_mode (boolean)
這個參數只有在啟動資料庫時,才能被設置。默認值是off。它決定資料庫是否打開歸檔模式。
archive_dir (string)
這個參數只有在啟動資料庫時,才能被設置。默認值是空串。它設定存放歸檔事務日誌文件的目錄。
archive_timeout (integer)
這個參數只能在postgresql.conf文件中被設置。默認值是0。單位是秒。如果archive_timeout的值不是0,而且當前時間減去數 據
庫上次進行事務日誌文件切換的時間大於archive_timeout的值,資料庫將進行一次事務日誌文件切換。一般情況下,資料庫只有在
一個事務日誌 文件寫滿以後,才會切換到下一個事務日誌文件,設定這個參數可以讓資料庫在一個事務日誌文件尚未寫滿的情況下
切換到下一個事務日誌文件。
10.7 優化器參數
10.7.1 存取方法參數
下列參數控制查詢優化器是否使用特定的存取方法。除非對優化器特別了解,一般情況下,使用它們默認值即可。
enable_bitmapscan (boolean)
打開或者關閉bitmap-scan 。默認值是 on。
enable_hashagg (boolean)
打開或者關閉hashed aggregation。默認值是 on。
enable_hashjoin (boolean)
打開或者關閉hash-join。默認值是 on。
enable_indexscan (boolean)
打開或者關閉index-scan。默認值是 on。
enable_mergejoin (boolean)
打開或者關閉merge-join。默認值是 on。
enable_nestloop (boolean)
打開或者關閉nested-loop join。默認值是 on。不可能完全不使用nested-loop join,關閉這個參數會讓系統在有其它存取方法可
用的情況下,不使用nested-loop join。
enable_seqscan (boolean)
打開或者關閉sequential scan。默認值是 on。不可能完全不使用sequential scan,關閉這個參數會讓系統在有其它存取方法可用
的情況下,不使用sequential scan。