1.3. 建立一個資料庫

看看您能否存取資料庫伺服器的第一個例子就是試著建立一個資料庫。 一台執行著的 PostgreSQL 伺服器可以管理許多資料庫。 通常我們會為每個項目和每個用戶單獨使用一個資料庫。

您的節點管理員可能已經為您建立了可以使用的資料庫。 他應該已經告訴您這個資料庫的名字。如果這樣您就可以省略這一步, 並且跳到下一節。

要建立一個新的資料庫,在我們這個例子裡叫 mydb,您可以使用下面的命令:

$ createdb mydb

它應該生成下面這樣的響應:

CREATE DATABASE

如果這樣,那麼這一步就成功了,您就可以忽略本節餘下的部分了。

如果您看到類似下面這樣的訊息

createdb: command not found

那麼就是PostgreSQL沒有安裝好。要麼是就根本沒裝上, 要麼是您的搜索路徑沒有設置正確。嘗試用絕對路徑調用該命令試試:

$ /usr/local/pgsql/bin/createdb mydb

在您的節點上這個路徑可能不一樣。和您的管理員聯繫或者看看安裝教學獲取正確的位置。

另外一種響應可能是這樣:

createdb: could not connect to database template1: could not connect to server:
No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

這意味著該伺服器沒有啟動,或者沒有在 createdb 預期的地方啟動。同樣, 您也要檢查安裝教學或者找管理員。

另外一個響應可能是這樣:

createdb: could not connect to database template1: FATAL:  user "joe" does not
exist

在這裡提到了您自己的登陸名。如果管理員沒有為您建立 PostgreSQL 用戶帳號, 就會發生這些現象。(PostgreSQL 用戶帳號和操作系統用戶帳號是不同的。) 如果您是管理員,參閱 Chapter 17 獲取建立用戶帳號的幫助。 您需要變成安裝 PostgreSQL 的操作系統用戶的身份(通常是 postgres)才能建立第一個用戶帳號。 也有可能是賦予您的 PostgreSQL 用戶名和您的操作系統用戶名不同; 這種情況下,您需要使用 -U 開關或者使用 PGUSER 環境變量聲明您的 PostgreSQL 用戶名。

如果您有個資料庫用戶帳號,但是沒有建立資料庫所需要的權限,那麼您會看到下面的東西:

createdb: database creation failed: ERROR:  permission denied to create database

並非所有用戶都經過了建立新資料庫的授權。 如果 PostgreSQL 拒絕為您建立資料庫, 那麼您需要讓節點管理員賦予您建立資料庫的權限。出現這種情況時請咨詢您的節點管理員。 如果您自己安裝了 PostgreSQL, 那麼您應該以您啟動資料庫伺服器的用戶身份登陸然後參考手冊完成權限的賦予工作。 [1]

您還可以用其它名字建立資料庫。 PostgreSQL 允許您在一個節點上建立任意數量的資料庫。 資料庫名必須是以字母開頭並且小於 63 個字元長。 一個方便的做法是建立和您目前用戶名同名的資料庫。 許多工具假設該資料庫名為預設資料庫名,所以這樣可以節省您的敲鍵。 要建立這樣的資料庫,只需要鍵入

$ createdb

如果您再也不想使用您的資料庫了,那麼您可以刪除它。 比如,如果您是資料庫 mydb 的所有人(建立人), 那麼您就可以用下面的命令刪除它:

$ dropdb mydb

(對於這條命令而言,資料庫名不是預設的用戶名。這樣您就必須聲明它。) 這個動作實際上將所有與該資料庫相關的文件都刪除並且不可取消, 因此做這件事之前一定要想清楚。

Notes

[1]

為什麼這麼干就行了? 解釋:PostgreSQL 用戶名是和操作系統用戶賬號分開的。 如果您與一個資料庫連線,您可以選擇以何種 PostgreSQL 用戶名進行連線; 如果您不選擇,那麼預設就是您的目前操作系統賬號。 如果這樣,那麼總有一個與操作系統用戶同名的 PostgreSQL 用戶賬號用於啟動伺服器, 並且通常這個用戶都有建立資料庫的權限。如果您不想以該用戶身份登陸, 那麼您也可以在任何地方聲明一個 -U 選項以選擇一個連線的 PostgreSQL 用戶名。