標籤:應用 fat cto fail name 情況 psql 個數 自己
建立資料庫
CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace_name ] [ CONNECTION LIMIT [=] connlimit ] ]
參數
要建立的資料庫名字。最好用雙引號包起來,以區分大小寫。
資料庫使用者的名字,他將是新資料庫的所有者,或者是使用DEFAULT
選項來指定當前預設使用者(也就是執行命令的使用者)。 要建立一個其他角色所有的資料庫,你必須是那個角色的直接或間接的成員,或者是超級使用者。
模板名,即從哪個模板建立新資料庫,或者使用DEFAULT
選項來指定預設模板(template1
)。
建立新資料庫使用的字元編碼。 可以使用文本名字(例如‘SQL_ASCII‘
)、整數編號或是DEFAULT
選項來指定(模版資料庫的編碼)。
用於新資料庫的定序(LC_COLLATE)。 這影響到應用對字串的排序次序,例如:在有ORDER BY的查詢中,以及用於文本列的索引的順序。 在預設情況下,使用模板資料庫的定序。 請看以下附加的限制。
用於新資料庫的字元分類(LC_CTYPE
)。 這影響字元的分類,例如: 小寫、大寫和數字。 預設情況下使用模板資料庫的字元分類。 請看以下附加的限制。
和新資料庫關聯的資料表空間名字, 或者使用DEFAULT
選項表示使用模版資料庫的資料表空間。 這個資料表空間將成為在這個資料庫裡建立的對象的預設資料表空間。
資料庫可以接受多少並發的串連。-1(預設)意味著沒有限制。
選擇性參數可以按任意順序書寫,而不僅僅是上面顯示的順序。
執行個體
CREATE DATABASE "myDb" WITH OWNER = postgres ENCODING = 'UTF8' CONNECTION LIMIT = -1;
psql中不支援多行,所以將上述SQL儲存至一個sql檔案中,在psql中執行\i FQ.sql
即可執行多行的SQL如下:
postgres=# \i FQ.sqlCREATE DATABASEpostgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- myDb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(4 rows)
事項
如果你看到類似下面這樣的資訊:
createdb: command not found
那麼就是PostgreSQL沒有安裝好:要麼是就根本沒裝上、要麼是搜尋路徑沒有包含它。 嘗試用絕對路徑調用該命令試試:
$ /usr/local/pgsql/bin/createdb mydb
在你的節點上這個路徑可能不一樣。請和管理員聯絡或者看看安裝指導以擷取正確的位置。
另外一種響應可能是這樣:
createdb: could not connect to database postgres: 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 postgres: FATAL: role "joe" does not exist
在這裡提到了你自己的登陸名。如果管理員沒有為你建立PostgreSQL 使用者帳號,就會發生這些現像。
如果你有個資料庫使用者帳號,但是沒有建立資料庫所需要的許可權,那麼你會看到下面的東西:
createdb: database creation failed: ERROR: permission denied to create database
並非所有使用者都經過了建立新資料庫的授權。如果PostgreSQL 拒絕為你建立資料庫,那麼你需要讓網站管理員賦予你建立資料庫的許可權。出現這種情況時 請諮詢你的網站管理員。如果你自己安裝了PostgreSQL,那麼你應該以你啟動資料庫伺服器的使用者身份登陸然後參考手冊完成許可權的賦予工作。
你還可以用其它名字建立資料庫。PostgreSQL允許你在 一個節點上建立任意數量的資料庫。資料庫名必須是以字母開頭並且小於 63 個位元組 長。一個方便的做法是建立和你目前使用者名同名的資料庫。許多工具假設它為預設的 資料庫名,所以這樣可以節省敲鍵。要建立這樣的資料庫,只需要鍵入:
$ createdb
切換資料庫
postgres-# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- myDb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres(4 rows)postgres-# \c "myDb"Password for user postgres: You are now connected to database "myDb" as user "postgres".myDb-#
- 也可以在使用
psql
命令時使用參數-d
指定資料庫名字
[PostgresFile] psql -U postgres -W -d "myDb" Password for user postgres:psql (9.5.11Type "help" for helpmyDb=#
刪除資料庫
DROP DATABASE [ IF EXISTS ] name
DROP DATABASE
刪除一個資料庫。刪除一個現存資料庫的目錄入口並且刪除包含資料的目錄。 只有資料庫擁有者能夠執行這條命令。還有,如果你或者任何其他人正在與目標資料庫連接, 那麼就不能執行這條命令。所以要與postgres
或者任何其它資料庫連接,再發出這條命令。DROP DATABASE
不能撤銷,小心使用!
參數
如果指定的資料庫不存在,那麼發出一個 notice 而不是拋出一個錯誤。
myDb=# DROP DATABASE IF EXISTS "myDb";ERROR: cannot drop the currently open databasemyDb=# \c postgresPassword for user postgres: You are now connected to database "postgres" as user "postgres".postgres=# DROP DATABASE IF EXISTS "myDb";DROP DATABASEpostgres=#
可以看到當前資料庫為myDb
時是不能進行刪除操作的。
PostgreSQL 資料庫操作