PostgreSQL 資料庫操作

來源:互聯網
上載者:User

標籤:應用   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 ] ]
參數
  • name

要建立的資料庫名字。最好用雙引號包起來,以區分大小寫。

  • user_name

資料庫使用者的名字,他將是新資料庫的所有者,或者是使用DEFAULT選項來指定當前預設使用者(也就是執行命令的使用者)。 要建立一個其他角色所有的資料庫,你必須是那個角色的直接或間接的成員,或者是超級使用者。

  • template

模板名,即從哪個模板建立新資料庫,或者使用DEFAULT選項來指定預設模板(template1)。

  • encoding

建立新資料庫使用的字元編碼。 可以使用文本名字(例如‘SQL_ASCII‘)、整數編號或是DEFAULT選項來指定(模版資料庫的編碼)。

  • lc_collate

用於新資料庫的定序(LC_COLLATE)。 這影響到應用對字串的排序次序,例如:在有ORDER BY的查詢中,以及用於文本列的索引的順序。 在預設情況下,使用模板資料庫的定序。 請看以下附加的限制。

  • lc_ctype

用於新資料庫的字元分類(LC_CTYPE)。 這影響字元的分類,例如: 小寫、大寫和數字。 預設情況下使用模板資料庫的字元分類。 請看以下附加的限制。

  • tablespace_name

和新資料庫關聯的資料表空間名字, 或者使用DEFAULT選項表示使用模版資料庫的資料表空間。 這個資料表空間將成為在這個資料庫裡建立的對象的預設資料表空間。

  • connlimit

資料庫可以接受多少並發的串連。-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
切換資料庫
  • 在psql使用\l列出資料庫,使用\c切換資料庫
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不能撤銷,小心使用!

參數
  • IF EXISTS

如果指定的資料庫不存在,那麼發出一個 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 資料庫操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.