Trang chủ / Chuyên đề / Các lệnh truy cấn quản lý bảng dữ liệu trong postgresql trên cloud-server
Thứ năm, 01/08/2013 | 00:00 GMT+7

Các lệnh truy cấn quản lý bảng dữ liệu trong postgresql trên cloud-server

PostgreSQL là một hệ quản trị database sử dụng ngôn ngữ truy vấn SQL. Đây là một hệ thống database rất ổn định và giàu tính năng được dùng để lưu trữ dữ liệu từ các ứng dụng khác trên VPS của bạn. Trong bài viết này, ta sẽ thảo luận về cách tạo và quản lý các bảng trong giao diện postgreSQL. Bạn sẽ học cách cấu hình bảng đúng cách và sử dụng chúng để lưu trữ dữ liệu.

Cách cài đặt và đăng nhập vào PostgreSQL trên Ubuntu

Trong hướng dẫn này, ta sẽ cài đặt PostgreSQL trên Ubuntu, cũng sẽ tương tự như các bản Linux khác.

Nhập các lệnh sau để cài đặt:

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

Sau khi cài đặt, hãy tạo một user mới để quản lý database mà ta sẽ tạo:

sudo adduser postgres_user

Đăng nhập vào user PostgreSQL mặc định (được gọi là "postgres") để tạo database và gán nó cho user mới:

sudo su - postgres
psql

Bạn sẽ được đưa vào dấu nhắc lệnh PostgreSQL.

Tạo user mới phù hợp với user hệ thống mà bạn đã tạo. Sau đó, tạo database do user đó quản lý:

CREATE USER postgres_user WITH PASSWORD 'password';
CREATE DATABASE my_postgres_db OWNER postgres_user;

Thoát ra khỏi giao diện bằng lệnh sau:

\q

Thoát khỏi account user "postgres" mặc định và đăng nhập vào user bạn đã tạo bằng các lệnh sau:

exit
sudo su - postgres_user

Đăng nhập vào database bạn đã tạo bằng lệnh sau:

psql my_postgres_db

Bây giờ ta đã sẵn sàng để tìm hiểu về quản lý bảng.

Cú pháp tạo bảng trong PostgreSQL

Database chưa có bảng nào, ta kiểm tra bằng cách cho PostgreSQL hiển thị các bảng:

\d
No relations found.

Ta có thể tạo một bảng mới bằng lệnh:

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;

Phần bên trong dấu ngoặc đơn được chia thành hai phần: định nghĩa column (column definitions) và ràng buộc bảng (table constraints).

Định nghĩa Bảng và column PostgreSQL

Các định nghĩa column tuân theo mẫu cú pháp này:

column_name data_type (optional_data_length_restriction) column_constraints

Tên column nên có ý nghĩa như dữ liệu nó chứa.

Các kiểu dữ liệu PostgreSQL

Kiểu dữ liệu có thể là bất kỳ kiểu nào sau đây:

  • boolean : Sử dụng "boolean" hoặc "bool" để khai báo giá trị đúng hoặc sai.
  • character values
    • char : giữ một ký tự duy nhất
    • char (#) : chứa # số ký tự. Các dấu cách sẽ được chèn vào để lấp đầy bất kỳ chỗ trống nào.
    • varchar (#) : chứa tối đa # số ký tự. Có thể chứa ít hơn.
  • integer values
    • smallint : số nguyên từ -32768 đến 32767.
    • int : số nguyên giữa -214783648 và 214783647.
    • serial : Số nguyên được điền tự động.
  • floating-point values
    • float (#) : số dấu phẩy động có độ chính xác tối thiểu là #.
    • real : số dấu phẩy động 8 byte
    • numeric (#, after_dec) : số thực có # chữ số và chữ số after_dec sau số thập phân
  • date and time values
    • date : lưu trữ giá trị ngày
    • time : lưu trữ giá trị thời gian
    • timestamp: lưu trữ giá trị ngày và giờ
    • timestamptz : lưu trữ dấu thời gian bao gồm dữ liệu múi giờ
    • interval: lưu trữ sự khác biệt giữa hai giá trị dấu thời gian
  • geometric data
    • point : lưu trữ một cặp tọa độ xác định một điểm
    • line : lưu trữ một tập hợp các điểm vạch ra một đường
    • lseg : lưu trữ dữ liệu xác định một đoạn thẳng
    • box : lưu trữ dữ liệu xác định hình chữ nhật
    • polygon : lưu trữ dữ liệu xác định bất kỳ không gian kín nào
  • device specifications
    • inet : lưu trữ địa chỉ IP
    • macaddr : lưu trữ địa chỉ MAC của equipment

Các ràng buộc về column và bảng PostreSQL

Định nghĩa column cũng có thể có các ràng buộc cung cấp luật cho loại dữ liệu được tìm thấy trong column. Các giá trị sau được dùng làm các giá trị được phân tách bằng dấu cách theo kiểu dữ liệu:

  • NOT NULL : column không được có giá trị rỗng
  • UNIQUE: giá trị column không được giống nhau cho bất kỳ bản ghi nào. Null luôn được coi là một giá trị duy nhất
  • PRIMARY KEY: sự kết hợp của hai ràng buộc trên. Chỉ được dùng một lần cho mỗi bảng
  • CHECK: đảm bảo một điều kiện là đúng với các giá trị trong column
  • REFERENCES (tham chiếu): giá trị phải tồn tại trong một column trong bảng khác

Sau khi các column được xác định, các ràng buộc trên toàn bảng có thể được khai báo. Các ràng buộc trên toàn bảng có thể là UNIQUE, PRIMARY KEY, CHECK, or REFERENCES..

Cách tạo bảng trong PostgreSQL

Hãy tạo một bảng kiểm tra để thực hành. Ta sẽ tạo một bảng có tên "pg_equiosystem" xác định các phần equipment playground (sân-chơi) khác nhau. Nhập định nghĩa bảng sau:

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

Ta có thể thấy bảng mới của bạn bằng lệnh "\ d" vào dấu nhắc:

\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)

Bảng được liệt kê, cũng như trình tự được tạo bởi khai báo kiểu dữ liệu nối tiếp "wear_id".

Cách thay đổi dữ liệu bảng trong PostgreSQL

Ta có thể thay đổi định nghĩa các bảng của bạn bằng cú pháp chung sau:

ALTER TABLE table_name Action_TO_Take;

Ví dụ: ta có thể thêm một column vào bảng "pg_equiosystem" bằng lệnh lệnh sau:

ALTER TABLE pg_equipment ADD COLUMN functioning bool;
ALTER TABLE

Ta có thể thấy column phụ bằng lệnh:

\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               |
 . . .

Để thêm giá trị mặc định chỉ định rằng "equipment nên được coi là hoạt động trừ khi có ghi chú khác", hãy đưa ra lệnh sau:

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

Nếu ta muốn đảm bảo giá trị cũng không rỗng, ta có thể làm như sau:

ALTER TABLE pg_equipment ALTER COLUMN functioning SET NOT NULL;

Để đổi tên column, hãy sử dụng cú pháp sau:

ALTER TABLE pg_equipment RENAME COLUMN functioning TO working_order;

Để xóa column ta vừa tạo, hãy nhập lệnh sau:

ALTER TABLE pg_equipment DROP COLUMN working_order;

Ta có thể đổi tên toàn bộ bảng bằng lệnh này:

ALTER TABLE pg_equipment RENAME TO playground_equip;

Xóa bảng trong PostgreSQL

Ta có thể xóa bảng ta đã tạo bằng lệnh:

DROP TABLE playground_equip;
DROP TABLE

Nếu ta cung chạy lệnh đó cho một bảng không tồn tại, ta sẽ nhận được lỗi sau:

ERROR: table "playground_equip" does not exist

Để tránh lỗi này, ta có thể yêu cầu postgreSQL xóa bảng nếu nó tồn tại và trả về thành công theo cả hai cách. Ta thực hiện việc này bằng cách đưa ra lệnh sau:

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

Lần này, cho ta biết rằng bảng không được tìm thấy, nhưng vẫn tiếp tục thành công và không đưa ra lôi.

Kết luận

Đến đây bạn đã biết cơ bản về tạo và quản lý các bảng đơn giản trong PostgreSQL. Những kỹ năng này sẽ hữu ích nếu bạn đang quản lý dữ liệu từ một ứng dụng khác hoặc học cách điều khiển PostgreSQL từ dòng lệnh.


Tags:

Các tin trước

Bảo mật MySQL và MariaDB Databases trên Linux VPS 2013-07-23

Cài đặt Firewall với UFW trên Ubuntu và Debian Cloud Server 2013-06-25

Cơ bản nhất về MYSQL trên Ubuntu CentOS 2012-06-12