想熟悉PostgreSQL?這篇就夠了


歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐干貨哦~

本文由angel_郁 發表於雲+社區專欄

什么是PostgreSQL?

PostgreSQL自由的對象-關系型數據庫服務器,在靈活的BSD風格許可證下發行。它在其他開放源代碼數據庫系統和專有系統之外,為用戶又提供了一種選擇。 我們還是建議您使用雲數據庫進行搭建,省去數據遷移等麻煩操作,數據庫詳見:https://cloud.tencent.com/product/cdb-overview

在本文中,我們將討論如何在postgreSQL接口中創建和管理表。您將學習如何正確配置表並使用它們來存儲您的信息。

如何在Ubuntu上安裝並登錄PostgreSQL

我們將在Ubuntu上安裝PostgreSQL,但它應該可以在大多數其他發行版的默認存儲庫中使用。

輸入以下要安裝的命令:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

安裝后,創建一個新用戶來管理我們將要創建的數據庫:

sudo adduser postgres_user

登錄默認的PostgreSQL用戶(稱為“postgres”)來創建數據庫並將其分配給新用戶:

sudo su  -  postgres
PSQL

您將被放入PostgreSQL命令提示符。

創建與您創建的系統用戶匹配的新用戶。然后創建該用戶管理的數據庫:

CREATE USER postgres_user密碼為' 密碼 ';
CREATE DATABASE my_postgres_db OWNER postgres_user ;

使用以下命令退出界面:

\q

退出默認的“postgres”用戶帳戶並使用以下命令登錄您創建的用戶:

exit
sudo su - postgres_user

使用以下命令登錄您創建的數據庫:

psql my_postgres_db

我們現在准備了解表管理。

PostgreSQL中的表創建語法

我們的數據庫還沒有任何表格。我們可以此命令為來驗證這一點:

\d
No relations found.

我們可以通過以下語法來創建新表:

CREATE TABLE new_table_name (
    table_column_title TYPE_OF_DATA column_constraints,
    next_column_title TYPE_OF_DATA column_constraints,
    table_constraint
    table_constraint
) INHERITS existing_table_to_inherit_from;

除了先前定義中列出的列之外,還繼承現有表中的所有列。括號內的部分分為兩部分:列定義和表約束。

PostgreSQL列和表定義

列定義遵循以下語法模式:

column_name data_type (optional_data_length_restriction) column_constraints

列名應該是不言自明的。

PostgreSQL數據類型

數據類型可以是以下任何一種:

  • 布爾型:使用“boolean”或“bool”聲明true或false值。
  • 字符值
    • char:擁有一個字符
    • char(#):保存#個字符數。將插入空間以填補任何額外的空間。
    • varchar(#):最多包含#個字符數。
  • 整數值
    • smallint:-32768和32767之間的整數。
    • int:-214783648和214783647之間的整數。
    • serial:自動填充的整數。
  • 浮點值
    • float(#):浮點數,至少有#個精度點。
    • real:8字節浮點數
    • numeric(#,after_dec):擁有#位數的實數,小數點后有after_dec位
  • 日期和時間值
    • date:存儲日期值
    • time:存儲時間值
    • timestamp:存儲日期和時間值
    • timestamptz:存儲包含時區數據的時間戳
    • interval:存儲兩個時間戳值之間的差值
  • 幾何數據
    • point:存儲一對定義點的坐標
    • line:存儲一組映射出一條線的點
    • lseg:存儲定義線段的數據
    • box:存儲定義矩形的數據
    • polygon:存儲定義任何封閉空間的數據
  • 設備規格
    • inet:存儲IP地址
    • macaddr:存儲設備MAC地址

PostreSQL列和表約束

列定義還可以具有約束,這些約束為列中找到的數據類型提供規則。以下內容可用作數據類型后面的空格分隔值:

  • NOT NULL:列不能具有空值
  • UNIQUE:任何記錄的列值都不能相同。Null始終被視為唯一值
  • PRIMARY KEY:上述兩個約束的組合。每張表只能使用一次
  • CHECK:確保列中值的條件為真
  • REFERENCES:值必須存在於另一個表的列中

在定義列之后,可以聲明表范圍的約束。表范圍的約束可以是UNIQUE,PRIMARY KEY,CHECK或REFERENCES。

如何在PostgreSQL中創建表

我們將創建一個名為“pg_equipment”的表,它定義了各種游樂場設備。輸入以下表定義:

CREATE TABLE pg_equipment (
    equip_id serial PRIMARY KEY,
    type varchar (50) NOT NULL,
    color varchar (25) NOT NULL,
    location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
    install_date date
    );
NOTICE:  CREATE TABLE will create implicit sequence "pg_equipment_equip_id_seq" for serial column "pg_equipment.equip_id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "pg_equipment_pkey" for table "pg_equipment"
CREATE TABLE

我們可以通過在提示符下輸入“\ d”來查看我們的新表:

\d
                       List of relations
 Schema |           Name            |   Type   |     Owner     
--------+---------------------------+----------+---------------
 public | pg_equipment              | table    | postgres_user
 public | pg_equipment_equip_id_seq | sequence | postgres_user
(2 rows)

列出該表,以及“equip_id”串行數據類型聲明創建的序列。

如何在PostgreSQL中更改表數據

我們可以使用以下通用語法更改表的定義:

ALTER TABLE table_name Action_TO_Take;

例如,我們可以通過輸入以下命令在我們的“pg_equipment”表中添加一列:

ALTER TABLE pg_equipment ADD COLUMN functioning bool;
ALTER TABLE

我們可以通過輸入來查看額外的列:

\d pg_equipment
    Column    |         Type          |                            Modifiers                            
--------------+-----------------------+-----------------------------------------------------------------
 equip_id     | integer               | not null default nextval('pg_equipment_equip_id_seq'::regclass)
 type         | character varying(50) | not null
 color        | character varying(25) | not null
 location     | character varying(25) | 
 install_date | date                  | 
 functioning  | boolean               |
 . . .

要添加一個默認值,請提供以下命令:

ALTER TABLE pg_equipment ALTER COLUMN functioning SET DEFAULT 'true';

如果我們想確保該值也不為null,我們可以這樣做:

ALTER TABLE pg_equipment ALTER COLUMN functioning SET NOT NULL;

要重命名該列,請使用以下語法:

ALTER TABLE pg_equipment RENAME COLUMN functioning TO working_order;

要刪除我們剛剛創建的列,請輸入以下命令:

ALTER TABLE pg_equipment DROP COLUMN working_order;

我們可以使用以下命令重命名整個表:

ALTER TABLE pg_equipment RENAME TO playground_equip;

刪除PostgreSQL中的表

我們可以通過輸入下面的命令來刪除我們創建的表:

DROP TABLE playground_equip;
DROP TABLE

如果我們將該命令提供給不存在的表,我們將看到以下錯誤:

ERROR: table "playground_equip" does not exist

為了避免這個錯誤,我們可以告訴postgreSQL刪除表,並以任何方式成功返回。我們通過發出以下命令來完成此操作:

DROP TABLE IF EXISTS playground_equip;
NOTICE:  table "playground_equip" does not exist, skipping
DROP TABLE

這一次,它告訴我們找不到表,但繼續而不是拋出錯誤。

結論

您現在應該知道在如何PostgreSQL中創建和管理簡單表。如果您正在者學習如何從命令行控制PostgreSQL,這些技能將非常有用。更多Linux教程,請持續關注騰訊雲+社區的文章。


參考文獻:《How To Create, Remove, & Manage Tables in PostgreSQL on a Cloud Server》

問答

PostgreSQL的隱藏特征?

相關閱讀

Nginx的安裝和配置疑難解答

如何備份你的MySQL數據庫

MySQL 8.0 版本功能變更介紹

此文已由作者授權騰訊雲+社區發布,原文鏈接:https://cloud.tencent.com/developer/article/1160560?fromSource=waitui

歡迎大家前往騰訊雲+社區或關注雲加社區微信公眾號(QcloudCommunity),第一時間獲取更多海量技術實踐干貨哦~

海量技術實踐經驗,盡在雲加社區


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM