Postgresql存儲過程調試:PostgreSQL 之 Function NOTICE

轉載自http://zhenghaoju700.blog.163.com/blog/static/13585951820116782843994/html

先安裝一個PostgreSQL(見補充知識)sql

比較Oracle PL/SQL shell

PL/SQL 中有 dbms_output.put_line("This is a log"); 能夠進行簡單的調試數據庫

固然咱們PostgreSQL 也有相應的函數 RAISE NOTICE 'This is a log %', param;ubuntu

% 佔位符 param 替換的值vim

RAISE 還有其餘級別 DEBUG,LOG,INFO,EXCEPTION ide

能夠在配置文件中配置它們 postgresql.conf 中的 client_min_messages 和 log_min_messages函數

RAISE EXCEPTION 會暫停函數的運行,其餘級別默認應該是顯示到客戶端。oop

 

舉一個簡單的例子吧post

舉例以前 首先肯定本身的數據庫有沒有安裝 plpgsql

select * from pg_language;

若是沒有的話 

create language plpgsql;

 

簡單例子:

CREATE OR REPLACE FUNCTION perctl.testraise()
  RETURNS void AS
$$
declare
begin
raise notice '===============';
while(2>1) loop
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
raise notice '====================================================================================================================================================================================';
end loop;
raise log '===============';
end;
$$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION perctl.fx_test_outofmemory_1()
  OWNER TO root;

測試一下

select TESTRAISE('this is a message');

 

爲何只有 Notice 和 INFO 信息呢?

經過 find / -name  postgresql 查找postgresql 安裝目錄

 

hjzheng@ubuntu:/etc/postgresql/8.4/main$ pwd

/etc/postgresql/8.4/main

 

在etc下查看配置文件  vim postgresql.conf 

 

看到客戶端最小顯示級別是NOTICE 因此必須大於Notice 才顯示 這就是log爲何沒有顯示

DEBUG 沒顯示 是由於它們只有DEBUG(1-5)

這樣就能夠放心調試了!!!!

 

 

補充知識:

安裝環境 Ubuntu 11.03

1.sudo apt-get install postgreSQL

2.sudo passwd postgres 改密碼 這個用戶是數據庫本身建立的

3.啓動服務 service postgresql start

4.su  postgres

5.psql 打開交互shell

6.\l 列出全部數據庫

 

 

參考資料:

http://www.postgresonline.com/journal/archives/83-Quick-Guide-to-writing-PLPGSQL-Functions-Part-3-NOTICES,-RECURSION,-and-more.html

相關文章
相關標籤/搜索