網頁

顯示具有 PostgreSQL 標籤的文章。 顯示所有文章
顯示具有 PostgreSQL 標籤的文章。 顯示所有文章

2012年10月24日 星期三

[資料庫]PostgreSQL 授權協議

PostgreSQL 採用 BSD 版權協議發佈,允許您在商業或非商業應用的兩種環境下均享有自由取得且不受版權限制的自主使用權甚至延伸功能。

BSD授權協議是所有開源程式碼授權協議中最自由不受任何限制用途的版權宣告, 您永遠都不必擔心 PostgreSQL 被特定的公司所控制, 您不需要購買權權, 就如同當今的 GNU/Linux 一樣, 在您擁有開放源始碼的同時, 其高可用性的品質只有不斷提升而沒有下降過, 甚至您可以將 PostgreSQL 包在您的產品並出售, 更可以任意的加諸和修改功能

資料來源:PostgreSQL 中文
閱讀全文...

2011年9月8日 星期四

忘記PostgreSQL資料庫管理者密碼,要如何重新設定

當真的忘了PostgreSQL super user password的時候,可依照下列步驟來重新設定密碼:
1. 確認可以從本機免密碼登入資料庫。
   修改 pg_hba.conf,找到local這一行,將其改成trust
   local all all trust

2. 重啟PostgreSQL
   # su - postgres
   # pg_ctl reload

3. 重設密碼
   $ psql -U postgres
   SQL> ALTER USER postgres PASSWORD 'YourPassword';

4. 為了安全起見,修改pg_hba.conf回原設定,並重啟PostgreSQL
閱讀全文...

pg_ctl 啟動、停止和重啟 PostgreSQL

pg_ctl 是一個用於啟動、停止, 或重啟 PostgreSQL 後端伺服器,及顯示伺服器的狀態的工具。

Synopsis
pg_ctl start | stop | reload | status | restart [-D data_dir]

-D data_dir
聲明該資料庫文件的文件系統位置。 如果忽略這個選項,使用環境變量 PGDATA。

Note: 使用此命令前,請先將使用者切換至PostgreSQL super user(postgres)。

啟動伺服器:
$ pg_ctl start

停止伺服器:
$ pg_ctl stop

重啟伺服器:
$ pg_ctl restart

顯示伺服器狀態:
$ pg_ctl status
pg_ctl: postmaster is running (pid: 15718)
Command line was:
/usr/bin/postmaster '-D' '/var/lib/pgsql/data' '-p' '5433' '-B' '128'
閱讀全文...

在CentOS安裝PostgreSQL

在CentOS安裝PostgreSQL最簡單的方式就是在安裝CentOS時,勾選安裝PostgreSQL。如果在安裝過程並沒有安裝PostgreSQL,可以透過下列步驟來將PostgreSQL安裝設定完成。

1. 事先準備
2. 安裝 PostgreSQL
3. 第一次啟動
4. 設定成開機啟動PostgreSQL
5. 修改設定檔(pg_hba.conf)
6. 重啟PostgreSQL


1. 事先準備

在CentOS安裝光碟可以找到底下三個rpm檔,將其放置於同一個目錄中。
postgresql-8.1.22-1.el5_5.1.i386.rpm (版本序號可能不同,請找類似postgresql開頭的檔案)
postgresql-libs-8.1.22-1.el5_5.1.i386.rpm
postgresql-server-8.1.22-1.el5_5.1.i386.rpm

2. 安裝PostgreSQL

執行下列命令來安裝PostgreSQL:
rpm -Uvh postgresql-*.rpm

yum install postgresql postgresql-server

3. 第一次啟動

執行下列命令來啟動PostgreSQL:
service postgresql start

/etc/init.d/postgresql restart

4. 設定成開機啟動PostgreSQL

啟動後沒任何問題時,再將PostgreSQL設定成開機時啟動。
chkconfig postgresql on

5. 修改設定檔(pg_hba.conf)

修改pg_hba.conf(預設路徑為/var/lib/pgsql/data)
#local all all ident sameuser
local all all trust
# host all all 127.0.0.1/32 ident sameuser
host all all 127.0.0.1/32 md5

Note: md5和trust差別在於trust允許在本機不用輸入密碼來登入資料庫,安全性較弱。

6. 重啟PostgreSQL

由於設定檔改變了,需通知 postmaster 重新載入這些新的設定。
執行以下命令:
su - postgres
pg_ctl reload

閱讀全文...

Perl connect/access PostgreSQL

底下說明了Perl如何連接PostgreSQL和操作sql。

事前準備
範例:
1. load module
2. 初始 database handle
3. connect to database
4. 執行SQL
5. 取得結果列數
6. 處理每一row資料


1. load module

use DBI;

2. 初始 database handle

my $db_driver = 'Pg';
my $db_name = 'yourDB';
my $db_host = 'localhost';
my $db_user = 'yourDBUser';
my $db_pass = 'yourDBPass';
my $db_port = '5432';
my $db_url = "dbi:${db_driver}:dbname=${db_name};host=${db_host};port=${db_port};"

3. connect to database

my $dbh = DBI->connect($db_url, $db_user, $db_pass) or die "Can't connecting to the database: $DBI::errstr\n";

4. 執行SQL

my $sql = "SELECT * FROM yourTable';
my $sth = $dbh->prepare($sql);
$sth->execute;

5. 取得結果列數

my $rows = $sth->rows;

6. 處理每一row資料

while ($row = $sth->fetchrow_hasherf()) {
    my ($field1, $field2, ...) = ($row->{field1_name}, $row->{field2_name}, ...);
    ...
}

閱讀全文...

2011年9月7日 星期三

如何查詢PostgreSQL資料庫使用空間大小及回收垃圾儲存空間

一般資料庫在使用一段時間後,隨著資料庫操作和資料越來越多,資料庫的儲存空間就會慢慢的增加,如果不適當的管理,最後會演變成一隻超吃空間的怪獸。
而一般的PostgreSQL SQL操作,如update或delete,這些資料的位元組,並沒有真正的被刪除,如不適當的回收,整個資料庫會虛胖到一個讓人無法接受的程度。

要如何知道資料庫的儲存的空間大小,PostgreSQL透過下列語法可以查詢資料庫所佔用的位元組:
postgres=> SELECT datname, pg_size_pretty(pg_database_size(datname)) as size FROM pg_database\g 
datname | size
--------------+--------- 
postgres | 3537 kB
template1 | 3480 kB
template0 | 3480 kB

(4 行)

PostgreSQL提供 VACUUM 指令來回收垃圾儲存空間。
1. 建議平常定時使用 VACUUM 不帶任何參數,來進行簡單的回收空間令其可再次使用。
2. 有特殊大量資料新增或長時間定期維護時,使用 VACUUM FULL來做完全清理的動作,會耗費較長的時間來回收垃圾空間。
Note:VACUUM期間會lock table,會導致無法存取。

閱讀全文...

2011年9月5日 星期一

如何查詢PostgreSQL的連線數

PostgreSQL的最大連線數是設定在postgresql.conf檔案內(預設存放位置為/var/lib/pgsql/data/),max_connections的預設值為100,每增加一個connection,則需增加400bytes 的shared memory。

至於要如何查詢PostgreSQL的連線數,請用下列sql語法:
SELECT datname, count(*) FROM pg_stat_activity GROUP BY datname;

查詢結果類似如下:
datname | count
----------------+-------
testdb | 2
template1 | 3
(2 rows)
閱讀全文...