(本文章原始記錄於 2010 年 5 月 24 日)

******* createdb 及 dropdb 建立及刪除資料庫 *******

  1. 使用 createdb 建立資料庫

    createdb 指令的使用必須在已有 server 啟動的狀態下方能執行,否則會產生錯誤;
    若 initdb 初始化 Cluster 檔案時有指定 -A password 強制要輸入密碼才能登入時,
    則 createdb 時一定要用 -U 指定一位擁有建立資料庫權限的使用者來建立資料庫。

    使用語法如下:
    createdb [OPTION] … [DBNAME] [DESCRIPTION]

    其中常用的 option 有以下幾個:

    -E ENCODING 指定資料庫使用的編碼,若不指定,則套用 initdb 時的編碼
    -l LOCALE 指定資料庫的 locale
    -O OWNER 指定該資料庫的擁有者為 OWNER
    === 以下為連線選項,表示要指定到哪一個 PostgreSQL Cluster 上 ===
    -h HOST 指定主機名稱
    -p PORT 指定主機 port
    -U USER 指定由哪位使用者建立本資料庫(必須擁有建立資料庫的權限)
    -W 強制使用者輸入密碼作確認,若 initdb 時指定 -A password 的話,則不管是否有此選項都會要求使用者輸入密碼

    範例:
    C:\> createdb -E BIG5 test
    建立以 BIG5 編碼的資料庫 test

    C:\> createdb -E UTF8 -O norm normal
    建立以 UTF8 編碼的資料庫 normal,並將擁有者設定給 norm

    C:\> createdb -E UTF8 -p 5432 -U admin weblog
    以 admin 帳號登入 port 為 5432 的 Cluster,建立以 UTF8 編碼的資料庫 weblog
    (未指定主機則是登入預設的 localhost)

    關於 createdb 的用法可以參考 C:\> createdb --help

  2. 使用 dropdb 刪除資料庫

    同 createdb 指令,必須在已有 server 啟動的狀態下方能執行,否則會產生錯誤;
    若 initdb 初始化 Cluster 檔案時有指定 -A password 強制要輸入密碼才能登入時,
    則 dropdb 時一定要用 -U 指定一位擁有建立資料庫權限的使用者來刪除資料庫。

    使用語法如下:
    dropdb [OPTION] … DBNAME

    其中常用的 option 有:

    -i 刪除前再詢問一次是否確定要刪除該資料庫
    === 以下為連線選項,表示要指定到哪一個 PostgreSQL Cluster 上 ===
    -h HOST 指定主機名稱
    -p PORT 指定主機 port
    -U USER 指定由哪位使用者刪除本資料庫(必須擁有建立資料庫的權限)
    -W 強制使用者輸入密碼作確認,若 initdb 時指定 -A password 的話,
    則不管是否有此選項都會要求使用者輸入密碼

    範例:
    C:\> dropdb -i tester
    刪除資料庫 tester,並在刪除前再詢問一次

    C:\> dropdb -U admin tester
    以 admin 帳號來刪除資料庫 tester

    除了 superuser 外,刪除資料庫的使用者必須同時也是該資料庫的擁有者才行,
    非資料庫的擁有者無法刪除該資料庫,所以一般使用者無法刪除其他人所建立的資料庫;
    同樣地,可以在別人建立的資料庫內建立資料表,但是無法刪除不是自己建立的資料表。
    superuser 則是不在此限,可以刪除任何資料庫,包括其他 superuser 所建立的資料庫。

    關於 dropdb 的用法可以參考 C:\> dropdb --help

  3. createdb 及 dropdb 的動作,可以用擁有建立資料庫權限的帳號登入 psql 後,直接下 SQL 指令 CREATE DATABASE <db>DROP DATABASE <db> 來達成。