PostgreSQL - Hướng dẫn nhanh

PostgreSQL là một hệ thống cơ sở dữ liệu quan hệ đối tượng mã nguồn mở, mạnh mẽ. Nó có hơn 15 năm trong giai đoạn phát triển tích cực và một kiến ​​trúc đã được chứng minh đã mang lại cho nó một danh tiếng mạnh mẽ về độ tin cậy, tính toàn vẹn của dữ liệu và tính đúng đắn.

Hướng dẫn này sẽ giúp bạn bắt đầu nhanh với PostgreSQL và giúp bạn thoải mái với lập trình PostgreSQL.

PostgreSQL là gì?

PostgreSQL (phát âm là post-gress-Q-L) là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở (DBMS) được phát triển bởi một nhóm tình nguyện viên trên toàn thế giới. PostgreSQL không được kiểm soát bởi bất kỳ công ty hoặc tổ chức tư nhân nào khác và mã nguồn được cung cấp miễn phí.

Lược sử về PostgreSQL

PostgreSQL, ban đầu được gọi là Postgres, được tạo ra tại UCB bởi một giáo sư khoa học máy tính tên là Michael Stonebraker. Stonebraker bắt đầu Postgres vào năm 1986 như một dự án tiếp nối người tiền nhiệm của nó, Ingres, hiện thuộc sở hữu của Computer Associates.

  • 1977-1985 - Một dự án có tên INGRES đã được phát triển.

    • Proof-of-concept cho cơ sở dữ liệu quan hệ

    • Thành lập công ty Ingres vào năm 1980

    • Được các Hiệp hội Máy tính mua vào năm 1994

  • 1986-1994 - POSTGRES

    • Phát triển các khái niệm trong INGRES tập trung vào hướng đối tượng và ngôn ngữ truy vấn - Quel

    • Cơ sở mã của INGRES không được sử dụng làm cơ sở cho POSTGRES

    • Được thương mại hóa dưới tên Illustra (do Informix mua lại, được IBM mua lại)

  • 1994-1995 - Postgres95

    • Hỗ trợ cho SQL đã được thêm vào năm 1994

    • Được phát hành dưới tên Postgres95 vào năm 1995

    • Được phát hành lại dưới dạng PostgreSQL 6.0 vào năm 1996

    • Thành lập Nhóm Phát triển Toàn cầu PostgreSQL

Các tính năng chính của PostgreSQL

PostgreSQL chạy trên tất cả các hệ điều hành chính, bao gồm Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) và Windows. Nó hỗ trợ văn bản, hình ảnh, âm thanh và video và bao gồm các giao diện lập trình cho C / C ++, Java, Perl, Python, Ruby, Tcl và Open Database Connectivity (ODBC).

PostgreSQL hỗ trợ một phần lớn tiêu chuẩn SQL và cung cấp nhiều tính năng hiện đại bao gồm:

  • Truy vấn SQL phức tạp
  • Lựa chọn phụ SQL
  • Khóa ngoại
  • Trigger
  • Views
  • Transactions
  • Kiểm soát đồng thời đa vũ trụ (MVCC)
  • Streaming Replication (kể từ 9.0)
  • Chế độ chờ nóng (kể từ 9.0)

Bạn có thể kiểm tra tài liệu chính thức của PostgreSQL để hiểu các tính năng nêu trên. PostgreSQL có thể được người dùng mở rộng theo nhiều cách. Ví dụ: bằng cách thêm mới -

  • Loại dữ liệu
  • Functions
  • Operators
  • Chức năng tổng hợp
  • Phương pháp lập chỉ mục

Hỗ trợ ngôn ngữ thủ tục

PostgreSQL hỗ trợ bốn ngôn ngữ thủ tục tiêu chuẩn, cho phép người dùng viết mã của riêng họ bằng bất kỳ ngôn ngữ nào và nó có thể được thực thi bởi máy chủ cơ sở dữ liệu PostgreSQL. Các ngôn ngữ thủ tục này là - PL / pgSQL, PL / Tcl, PL / Perl và PL / Python. Bên cạnh đó, các ngôn ngữ thủ tục phi tiêu chuẩn khác như PL / PHP, PL / V8, PL / Ruby, PL / Java, v.v., cũng được hỗ trợ.

Để bắt đầu hiểu những điều cơ bản về PostgreSQL, trước tiên chúng ta hãy cài đặt PostgreSQL. Chương này giải thích về cách cài đặt PostgreSQL trên các nền tảng Linux, Windows và Mac OS.

Cài đặt PostgreSQL trên Linux / Unix

Làm theo các bước đã cho để cài đặt PostgreSQL trên máy Linux của bạn. Đảm bảo rằng bạn đã đăng nhập bằngroot trước khi bạn tiến hành cài đặt.

  • Chọn số phiên bản PostgreSQL bạn muốn và chính xác nhất có thể, nền tảng bạn muốn từ EnterpriseDB

  • Tôi đã tải xuống postgresql-9.2.4-1-linux-x64.runcho máy CentOS-6 64 bit của tôi. Bây giờ, chúng ta hãy thực thi nó như sau:

[root@host]# chmod +x postgresql-9.2.4-1-linux-x64.run
[root@host]# ./postgresql-9.2.4-1-linux-x64.run
------------------------------------------------------------------------
Welcome to the PostgreSQL Setup Wizard.

------------------------------------------------------------------------
Please specify the directory where PostgreSQL will be installed.

Installation Directory [/opt/PostgreSQL/9.2]:
  • Khi bạn khởi chạy trình cài đặt, nó sẽ hỏi bạn một số câu hỏi cơ bản như vị trí cài đặt, mật khẩu của người dùng sẽ sử dụng cơ sở dữ liệu, số cổng, v.v. Vì vậy, hãy giữ tất cả chúng ở giá trị mặc định ngoại trừ mật khẩu, mà bạn có thể cung cấp mật khẩu. theo sự lựa chọn của bạn. Nó sẽ cài đặt PostgreSQL trên máy Linux của bạn và sẽ hiển thị thông báo sau:

Please wait while Setup installs PostgreSQL on your computer.

 Installing
 0% ______________ 50% ______________ 100%
 #########################################

-----------------------------------------------------------------------
Setup has finished installing PostgreSQL on your computer.
  • Làm theo các bước sau cài đặt sau để tạo cơ sở dữ liệu của bạn -

[root@host]# su - postgres
Password:
bash-4.1$ createdb testdb bash-4.1$ psql testdb
psql (8.4.13, server 9.2.4)

test=#
  • Bạn có thể khởi động / khởi động lại máy chủ postgres trong trường hợp nó không chạy bằng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]
  • Nếu cài đặt của bạn đúng, bạn sẽ có lời nhắc PotsgreSQL test=# như được trình bày ở trên.

Cài đặt PostgreSQL trên Windows

Làm theo các bước nhất định để cài đặt PostgreSQL trên máy Windows của bạn. Đảm bảo rằng bạn đã tắt Phần mềm chống vi-rút của bên thứ ba trong khi cài đặt.

  • Chọn số phiên bản PostgreSQL bạn muốn và chính xác nhất có thể, nền tảng bạn muốn từ EnterpriseDB

  • Tôi đã tải xuống postgresql-9.2.4-1-windows.exe cho PC Windows của mình đang chạy ở chế độ 32bit, vì vậy hãy để chúng tôi chạy postgresql-9.2.4-1-windows.exevới tư cách là quản trị viên để cài đặt PostgreSQL. Chọn vị trí bạn muốn cài đặt nó. Theo mặc định, nó được cài đặt trong thư mục Program Files.

  • Bước tiếp theo của quá trình cài đặt sẽ là chọn thư mục nơi dữ liệu của bạn sẽ được lưu trữ. Theo mặc định, nó được lưu trữ trong thư mục "data".

  • Tiếp theo, thiết lập yêu cầu mật khẩu, vì vậy bạn có thể sử dụng mật khẩu yêu thích của mình.

  • Bước tiếp theo; giữ cổng như mặc định.

  • Trong bước tiếp theo, khi được hỏi về "Ngôn ngữ", tôi đã chọn "Anh, Hoa Kỳ".

  • Phải mất một lúc để cài đặt PostgreSQL trên hệ thống của bạn. Khi hoàn tất quá trình cài đặt, bạn sẽ nhận được màn hình sau. Bỏ chọn hộp kiểm và nhấp vào nút Kết thúc.

Sau khi quá trình cài đặt hoàn tất, bạn có thể truy cập trình bao pgAdmin III, StackBuilder và PostgreSQL từ Trình đơn chương trình của bạn trong PostgreSQL 9.2.

Cài đặt PostgreSQL trên Mac

Làm theo các bước đã cho để cài đặt PostgreSQL trên máy Mac của bạn. Đảm bảo rằng bạn đã đăng nhập bằngadministrator trước khi bạn tiến hành cài đặt.

  • Chọn số phiên bản mới nhất của PostgreSQL dành cho Mac OS có sẵn tại EnterpriseDB

  • Tôi đã tải xuống postgresql-9.2.4-1-osx.dmgcho Mac OS của tôi đang chạy với OS X phiên bản 10.8.3. Bây giờ, chúng ta hãy mở hình ảnh dmg trong công cụ tìm và chỉ cần nhấp đúp vào nó sẽ cung cấp cho bạn trình cài đặt PostgreSQL trong cửa sổ sau:

  • Tiếp theo, nhấp vào postgres-9.2.4-1-osxbiểu tượng này sẽ đưa ra thông báo cảnh báo. Chấp nhận cảnh báo và tiến hành cài đặt thêm. Nó sẽ yêu cầu mật khẩu quản trị viên như được thấy trong cửa sổ sau:

Nhập mật khẩu, tiến hành cài đặt và sau bước này, khởi động lại máy Mac của bạn. Nếu bạn không nhìn thấy cửa sổ sau, hãy bắt đầu cài đặt lại một lần nữa.

  • Khi bạn khởi chạy trình cài đặt, nó sẽ hỏi bạn một số câu hỏi cơ bản như vị trí cài đặt, mật khẩu của người dùng sẽ sử dụng cơ sở dữ liệu, số cổng, v.v. Do đó, hãy giữ tất cả chúng ở giá trị mặc định ngoại trừ mật khẩu mà bạn có thể cung cấp theo sự lựa chọn của bạn. Nó sẽ cài đặt PostgreSQL trong máy Mac của bạn trong thư mục Ứng dụng mà bạn có thể kiểm tra -

  • Bây giờ, bạn có thể khởi chạy bất kỳ chương trình nào để bắt đầu. Chúng ta hãy bắt đầu với SQL Shell. Khi bạn khởi chạy SQL Shell, chỉ cần sử dụng tất cả các giá trị mặc định mà nó hiển thị ngoại trừ, nhập mật khẩu của bạn, mà bạn đã chọn tại thời điểm cài đặt. Nếu mọi thứ diễn ra tốt đẹp, thì bạn sẽ ở bên trong cơ sở dữ liệu postgres vàpostgress# lời nhắc sẽ được hiển thị như hình dưới đây -

Xin chúc mừng!!! Bây giờ bạn đã có sẵn môi trường để bắt đầu lập trình cơ sở dữ liệu PostgreSQL.

Chương này cung cấp danh sách các lệnh SQL PostgreSQL, theo sau là các quy tắc cú pháp chính xác cho từng lệnh này. Tập hợp các lệnh này được lấy từ công cụ dòng lệnh psql. Bây giờ bạn đã cài đặt Postgres, hãy mở psql dưới dạng:

Program Files → PostgreSQL 9.2 → SQL Shell(psql).

Sử dụng psql, bạn có thể tạo một danh sách đầy đủ các lệnh bằng cách sử dụng lệnh \ help. Đối với cú pháp của một lệnh cụ thể, hãy sử dụng lệnh sau:

postgres-# \help <command_name>

Câu lệnh SQL

Một câu lệnh SQL bao gồm các mã thông báo trong đó mỗi mã thông báo có thể đại diện cho một từ khóa, mã định danh, mã định danh được trích dẫn, hằng số hoặc biểu tượng ký tự đặc biệt. Bảng dưới đây sử dụng câu lệnh SELECT đơn giản để minh họa một câu lệnh SQL cơ bản nhưng đầy đủ và các thành phần của nó.

LỰA CHỌN id, tên TỪ Những trạng thái
Loại mã thông báo Từ khóa Định danh Từ khóa Định danh
Sự miêu tả Chỉ huy Cột id và tên Mệnh đề Tên bảng

Các lệnh SQL PostgreSQL

HUỶ BỎ

Hủy bỏ giao dịch hiện tại.

ABORT [ WORK | TRANSACTION ]

ALTER AGGREGATE

Thay đổi định nghĩa của một hàm tổng hợp.

ALTER AGGREGATE name ( type ) RENAME TO new_name
ALTER AGGREGATE name ( type ) OWNER TO new_owner

CHUYỂN ĐỔI ALTER

Thay đổi định nghĩa của một chuyển đổi.

ALTER CONVERSION name RENAME TO new_name
ALTER CONVERSION name OWNER TO new_owner

ALTER DATABASE

Thay đổi một tham số cụ thể của cơ sở dữ liệu.

ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT }
ALTER DATABASE name RESET parameter
ALTER DATABASE name RENAME TO new_name
ALTER DATABASE name OWNER TO new_owner

ALTER DOMAIN

Thay đổi định nghĩa của một tham số miền cụ thể.

ALTER DOMAIN name { SET DEFAULT expression | DROP DEFAULT }
ALTER DOMAIN name { SET | DROP } NOT NULL
ALTER DOMAIN name ADD domain_constraint
ALTER DOMAIN name DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name OWNER TO new_owner

CHỨC NĂNG ALTER

Thay đổi định nghĩa của một hàm.

ALTER FUNCTION name ( [ type [, ...] ] ) RENAME TO new_name
ALTER FUNCTION name ( [ type [, ...] ] ) OWNER TO new_owner

NHÓM ALTER

Thay đổi nhóm người dùng.

ALTER GROUP groupname ADD USER username [, ... ]
ALTER GROUP groupname DROP USER username [, ... ]
ALTER GROUP groupname RENAME TO new_name

ALTER INDEX

Thay đổi định nghĩa của một chỉ mục.

ALTER INDEX name OWNER TO new_owner
ALTER INDEX name SET TABLESPACE indexspace_name
ALTER INDEX name RENAME TO new_name

ALTER LANGUAGE

Thay đổi định nghĩa của một ngôn ngữ thủ tục.

ALTER LANGUAGE name RENAME TO new_name

ALTER OPERATOR

Thay đổi định nghĩa của một toán tử.

ALTER OPERATOR name ( { lefttype | NONE }, { righttype | NONE } )
OWNER TO new_owner

ALTER OPERATOR CLASS

Thay đổi định nghĩa của một lớp toán tử.

ALTER OPERATOR CLASS name USING index_method RENAME TO new_name
ALTER OPERATOR CLASS name USING index_method OWNER TO new_owner

ALTER SCHEMA

Thay đổi định nghĩa của một lược đồ.

ALTER SCHEMA name RENAME TO new_name
ALTER SCHEMA name OWNER TO new_owner

ALTER SEQUENCE

Thay đổi định nghĩa của trình tạo chuỗi.

ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ]
[ MAXVALUE maxvalue | NO MAXVALUE ]
[ RESTART [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]

BẢNG ALTER

Thay đổi định nghĩa của một bảng.

ALTER TABLE [ ONLY ] name [ * ]
action [, ... ]
ALTER TABLE [ ONLY ] name [ * ]
RENAME [ COLUMN ] column TO new_column
ALTER TABLE name
RENAME TO new_name

Trường hợp hành động là một trong những dòng sau:

ADD [ COLUMN ] column_type [ column_constraint [ ... ] ]
DROP [ COLUMN ] column [ RESTRICT | CASCADE ]
ALTER [ COLUMN ] column TYPE type [ USING expression ]
ALTER [ COLUMN ] column SET DEFAULT expression
ALTER [ COLUMN ] column DROP DEFAULT
ALTER [ COLUMN ] column { SET | DROP } NOT NULL
ALTER [ COLUMN ] column SET STATISTICS integer
ALTER [ COLUMN ] column SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
ADD table_constraint
DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
CLUSTER ON index_name
SET WITHOUT CLUSTER
SET WITHOUT OIDS
OWNER TO new_owner
SET TABLESPACE tablespace_name

ALTER TABLESPACE

Thay đổi định nghĩa của một vùng bảng.

ALTER TABLESPACE name RENAME TO new_name
ALTER TABLESPACE name OWNER TO new_owner

ALTER TRIGGER

Thay đổi định nghĩa của một trình kích hoạt.

ALTER TRIGGER name ON table RENAME TO new_name

LOẠI ALTER

Thay đổi định nghĩa của một loại.

ALTER TYPE name OWNER TO new_owner

ALTER USER

Thay đổi tài khoản người dùng cơ sở dữ liệu.

ALTER USER name [ [ WITH ] option [ ... ] ]
ALTER USER name RENAME TO new_name
ALTER USER name SET parameter { TO | = } { value | DEFAULT }
ALTER USER name RESET parameter

Trong trường hợp tùy chọn có thể -

[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| VALID UNTIL 'abstime'

PHÂN TÍCH

Thu thập số liệu thống kê về cơ sở dữ liệu.

ANALYZE [ VERBOSE ] [ table [ (column [, ...] ) ] ]

BẮT ĐẦU

Bắt đầu một khối giao dịch.

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

Trong đó transaction_mode là một trong -

ISOLATION LEVEL { 
   SERIALIZABLE | REPEATABLE READ | READ COMMITTED
   | READ UNCOMMITTED
}
READ WRITE | READ ONLY

KIỂM TRA

Buộc một điểm kiểm tra nhật ký giao dịch.

CHECKPOINT

ĐÓNG

Đóng con trỏ.

CLOSE name

CỤM

Nhóm một bảng theo một chỉ mục.

CLUSTER index_name ON table_name
CLUSTER table_name
CLUSTER

BÌNH LUẬN

Xác định hoặc thay đổi chú thích của một đối tượng.

COMMENT ON {
   TABLE object_name |
   COLUMN table_name.column_name |
   AGGREGATE agg_name (agg_type) |
   CAST (source_type AS target_type) |
   CONSTRAINT constraint_name ON table_name |
   CONVERSION object_name |
   DATABASE object_name |
   DOMAIN object_name |
   FUNCTION func_name (arg1_type, arg2_type, ...) |
   INDEX object_name |
   LARGE OBJECT large_object_oid |
   OPERATOR op (left_operand_type, right_operand_type) |
   OPERATOR CLASS object_name USING index_method |
   [ PROCEDURAL ] LANGUAGE object_name |
   RULE rule_name ON table_name |
   SCHEMA object_name |
   SEQUENCE object_name |
   TRIGGER trigger_name ON table_name |
   TYPE object_name |
   VIEW object_name
} 
IS 'text'

CAM KẾT

Cam kết giao dịch hiện tại.

COMMIT [ WORK | TRANSACTION ]

BẢN SAO

Sao chép dữ liệu giữa tệp và bảng.

COPY table_name [ ( column [, ...] ) ]
FROM { 'filename' | STDIN }
[ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]
COPY table_name [ ( column [, ...] ) ]
TO { 'filename' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ]

TẠO TỔNG HỢP

Xác định một hàm tổng hợp mới.

CREATE AGGREGATE name (
   BASETYPE = input_data_type,
   SFUNC = sfunc,
   STYPE = state_data_type
   [, FINALFUNC = ffunc ]
   [, INITCOND = initial_condition ]
)

TẠO CAST

Xác định một dàn diễn viên mới.

CREATE CAST (source_type AS target_type)
WITH FUNCTION func_name (arg_types)
[ AS ASSIGNMENT | AS IMPLICIT ]
CREATE CAST (source_type AS target_type)
WITHOUT FUNCTION
[ AS ASSIGNMENT | AS IMPLICIT ]

TẠO CONSTRAINT TRIGGER

Xác định một trình kích hoạt ràng buộc mới.

CREATE CONSTRAINT TRIGGER name
AFTER events ON
table_name constraint attributes
FOR EACH ROW EXECUTE PROCEDURE func_name ( args )

TẠO CHUYỂN ĐỔI

Xác định một chuyển đổi mới.

CREATE [DEFAULT] CONVERSION name
FOR source_encoding TO dest_encoding FROM func_name

TẠO NÊN CƠ SỞ DỮ LIỆU

Tạo một cơ sở dữ liệu mới.

CREATE DATABASE name
[ [ WITH ] [ OWNER [=] db_owner ]
   [ TEMPLATE [=] template ]
   [ ENCODING [=] encoding ]
   [ TABLESPACE [=] tablespace ] 
]

TẠO MIỀN

Xác định một miền mới.

CREATE DOMAIN name [AS] data_type
[ DEFAULT expression ]
[ constraint [ ... ] ]

Ràng buộc ở đâu -

[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL | CHECK (expression) }

TẠO CHỨC NĂNG

Xác định một chức năng mới.

CREATE [ OR REPLACE ] FUNCTION name ( [ [ arg_name ] arg_type [, ...] ] )
RETURNS ret_type
{ LANGUAGE lang_name
   | IMMUTABLE | STABLE | VOLATILE
   | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
   | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
   | AS 'definition'
   | AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]

TẠO NHÓM

Xác định một nhóm người dùng mới.

CREATE GROUP name [ [ WITH ] option [ ... ] ]
Where option can be:
SYSID gid
| USER username [, ...]

TẠO CHỈ SỐ

Xác định một chỉ mục mới.

CREATE [ UNIQUE ] INDEX name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [, ...] )
[ TABLESPACE tablespace ]
[ WHERE predicate ]

TẠO NGÔN NGỮ

Xác định một ngôn ngữ thủ tục mới.

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
HANDLER call_handler [ VALIDATOR val_function ]

TẠO VẬN HÀNH

Xác định một toán tử mới.

CREATE OPERATOR name (
   PROCEDURE = func_name
   [, LEFTARG = left_type ] [, RIGHTARG = right_type ]
   [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
   [, RESTRICT = res_proc ] [, JOIN = join_proc ]
   [, HASHES ] [, MERGES ]
   [, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
   [, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)

TẠO LỚP VẬN HÀNH

Xác định một lớp toán tử mới.

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type
USING index_method AS
{ OPERATOR strategy_number operator_name [ ( op_type, op_type ) ] [ RECHECK ]
   | FUNCTION support_number func_name ( argument_type [, ...] )
   | STORAGE storage_type
} [, ... ]

TẠO QUY TẮC

Xác định quy tắc viết lại mới.

CREATE [ OR REPLACE ] RULE name AS ON event
TO table [ WHERE condition ]
DO [ ALSO | INSTEAD ] { NOTHING | command | ( command ; command ... ) }

TẠO SCHEMA

Xác định một lược đồ mới.

CREATE SCHEMA schema_name
[ AUTHORIZATION username ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION username
[ schema_element [ ... ] ]

TẠO YÊU CẦU

Xác định trình tạo trình tự mới.

CREATE [ TEMPORARY | TEMP ] SEQUENCE name
[ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ]
[ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]

TẠO BẢNG

Xác định một bảng mới.

CREATE [ [ GLOBAL | LOCAL ] { 
   TEMPORARY | TEMP } ] TABLE table_name ( { 
      column_name data_type [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
      | table_constraint
      | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] 
   } [, ... ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

Nơi column_constraint -

[ CONSTRAINT constraint_name ] { 
   NOT NULL |
   NULL |
   UNIQUE [ USING INDEX TABLESPACE tablespace ] |
   PRIMARY KEY [ USING INDEX TABLESPACE tablespace ] |
   CHECK (expression) |
   REFERENCES ref_table [ ( ref_column ) ]
   [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
   [ ON DELETE action ] [ ON UPDATE action ] 
}
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

table_constraint là -

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] ) [ USING INDEX TABLESPACE tablespace ] |
PRIMARY KEY ( column_name [, ... ] ) [ USING INDEX TABLESPACE tablespace ] |
CHECK ( expression ) |
FOREIGN KEY ( column_name [, ... ] )
REFERENCES ref_table [ ( ref_column [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE action ] [ ON UPDATE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

TẠO BẢNG NHƯ

Xác định một bảng mới từ kết quả của một truy vấn.

CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name
[ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
AS query

TẠO TABLESPACE

Xác định một vùng bảng mới.

CREATE TABLESPACE tablespace_name [ OWNER username ] LOCATION 'directory'

TẠO TRIGGER

Xác định một trình kích hoạt mới.

CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE func_name ( arguments )

TẠO LOẠI

Xác định kiểu dữ liệu mới.

CREATE TYPE name AS
( attribute_name data_type [, ... ] )
CREATE TYPE name (
INPUT = input_function,
OUTPUT = output_function
[, RECEIVE = receive_function ]
[, SEND = send_function ]
[, ANALYZE = analyze_function ]
[, INTERNALLENGTH = { internal_length | VARIABLE } ]
[, PASSEDBYVALUE ]
[, ALIGNMENT = alignment ]
[, STORAGE = storage ]
[, DEFAULT = default ]
[, ELEMENT = element ]
[, DELIMITER = delimiter ]
)

TẠO NGƯỜI DÙNG

Xác định một tài khoản người dùng cơ sở dữ liệu mới.

CREATE USER name [ [ WITH ] option [ ... ] ]

Trong trường hợp tùy chọn có thể -

SYSID uid
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| IN GROUP group_name [, ...]
| VALID UNTIL 'abs_time'

TẠO CHẾ ĐỘ XEM

Xác định một chế độ xem mới.

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query

DEALLOCATE

Phân bổ một tuyên bố đã chuẩn bị.

DEALLOCATE [ PREPARE ] plan_name

KHAI BÁO

Xác định con trỏ.

DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
[ FOR { READ ONLY | UPDATE [ OF column [, ...] ] } ]

XÓA BỎ

Xóa các hàng của bảng.

DELETE FROM [ ONLY ] table [ WHERE condition ]

DROP AGGREGATE

Loại bỏ một chức năng tổng hợp.

DROP AGGREGATE name ( type ) [ CASCADE | RESTRICT ]

DROP CAST

Loại bỏ một diễn viên.

DROP CAST (source_type AS target_type) [ CASCADE | RESTRICT ]

DROP CHUYỂN ĐỔI

Xóa một chuyển đổi.

DROP CONVERSION name [ CASCADE | RESTRICT ]

DROP DATABASE

Xóa cơ sở dữ liệu.

DROP DATABASE name

DROP DOMAIN

Xóa miền.

DROP DOMAIN name [, ...] [ CASCADE | RESTRICT ]

CHỨC NĂNG DROP

Xóa một chức năng.

DROP FUNCTION name ( [ type [, ...] ] ) [ CASCADE | RESTRICT ]

NHÓM DROP

Xóa một nhóm người dùng.

DROP GROUP name

DROP INDEX

Xóa một chỉ mục.

DROP INDEX name [, ...] [ CASCADE | RESTRICT ]

DROP NGÔN NGỮ

Xóa một ngôn ngữ thủ tục.

DROP [ PROCEDURAL ] LANGUAGE name [ CASCADE | RESTRICT ]

DROP OPERATOR

Xóa một toán tử.

DROP OPERATOR name ( { left_type | NONE }, { right_type | NONE } )
[ CASCADE | RESTRICT ]

DROP OPERATOR CLASS

Loại bỏ một lớp toán tử.

DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ]

QUY TẮC DROP

Xóa quy tắc viết lại.

DROP RULE name ON relation [ CASCADE | RESTRICT ]

DROP SCHEMA

Xóa một lược đồ.

DROP SCHEMA name [, ...] [ CASCADE | RESTRICT ]

DROP SEQUENCE

Xóa một chuỗi.

DROP SEQUENCE name [, ...] [ CASCADE | RESTRICT ]

DROP BẢNG

Xóa bảng.

DROP TABLE name [, ...] [ CASCADE | RESTRICT ]

DROP TABLESPACE

Xóa một vùng bảng.

DROP TABLESPACE tablespace_name

DROP TRIGGER

Loại bỏ trình kích hoạt.

DROP TRIGGER name ON table [ CASCADE | RESTRICT ]

LOẠI DROP

Xóa một kiểu dữ liệu.

DROP TYPE name [, ...] [ CASCADE | RESTRICT ]

DROP USER

Xóa tài khoản người dùng cơ sở dữ liệu.

DROP USER name

DROP XEM

Xóa chế độ xem.

DROP VIEW name [, ...] [ CASCADE | RESTRICT ]

KẾT THÚC

Cam kết giao dịch hiện tại.

END [ WORK | TRANSACTION ]

HÀNH HÌNH

Thực hiện một câu lệnh đã chuẩn bị.

EXECUTE plan_name [ (parameter [, ...] ) ]

GIẢI THÍCH

Hiển thị kế hoạch thực hiện của một câu lệnh.

EXPLAIN [ ANALYZE ] [ VERBOSE ] statement

ĐIỀN

Lấy các hàng từ truy vấn bằng con trỏ.

FETCH [ direction { FROM | IN } ] cursor_name

Trường hợp hướng có thể để trống hoặc một trong -

NEXT
PRIOR
FIRST
LAST
ABSOLUTE count
RELATIVE count
count
ALL
FORWARD
FORWARD count
FORWARD ALL
BACKWARD
BACKWARD count
BACKWARD ALL

BAN CHO

Xác định đặc quyền truy cập.

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] table_name [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION func_name ([type, ...]) [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE lang_name [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
TO { username | GROUP group_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

CHÈN

Tạo hàng mới trong bảng.

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }

NGHE

Nghe thông báo.

LISTEN name

TẢI

Tải hoặc tải lại tệp thư viện được chia sẻ.

LOAD 'filename'

KHÓA

Khóa bàn.

LOCK [ TABLE ] name [, ...] [ IN lock_mode MODE ] [ NOWAIT ]

Trong đó lock_mode là một trong -

ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
| SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE

DI CHUYỂN

Định vị con trỏ.

MOVE [ direction { FROM | IN } ] cursor_name

THÔNG BÁO

Tạo thông báo.

NOTIFY name

CHUẨN BỊ

Chuẩn bị một tuyên bố để thực hiện.

PREPARE plan_name [ (data_type [, ...] ) ] AS statement

REINDEX

Xây dựng lại các chỉ mục.

REINDEX { DATABASE | TABLE | INDEX } name [ FORCE ]

PHÁT HÀNH SAVEPOINT

Hủy một điểm lưu đã xác định trước đó.

RELEASE [ SAVEPOINT ] savepoint_name

CÀI LẠI

Khôi phục giá trị của một tham số thời gian chạy về giá trị mặc định.

RESET name
RESET ALL

THU HỒI

Xóa đặc quyền truy cập.

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] table_name [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION func_name ([type, ...]) [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE lang_name [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | GROUP group_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

ROLLBACK

Hủy bỏ giao dịch hiện tại.

ROLLBACK [ WORK | TRANSACTION ]

QUAY LẠI SAVEPOINT

Quay lại điểm lưu.

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

SAVEPOINT

Xác định điểm lưu mới trong giao dịch hiện tại.

SAVEPOINT savepoint_name

LỰA CHỌN

Truy xuất các hàng từ một bảng hoặc dạng xem.

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ AS output_name ] [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
[ FOR UPDATE [ OF table_name [, ...] ] ]
from_item
[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
function_name ( [ argument [, ...] ] )
[ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
from_item [ NATURAL ] join_type from_item
[ ON join_condition | USING ( join_column [, ...] ) ]

CHỌN VÀO

Xác định một bảng mới từ kết quả của một truy vấn.

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ AS output_name ] [, ...]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
[ FOR UPDATE [ OF table_name [, ...] ] ]

BỘ

Thay đổi tham số thời gian chạy.

SET [ SESSION | LOCAL ] name { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { time_zone | LOCAL | DEFAULT }

THIẾT LẬP CONSTRAINTS

Đặt chế độ kiểm tra ràng buộc cho giao dịch hiện tại.

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

ĐẶT ỦY QUYỀN CỦA PHẦN

Đặt mã định danh người dùng phiên và mã định danh người dùng hiện tại của phiên hiện tại.

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION username
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

ĐẶT GIAO DỊCH

Đặt các đặc điểm của giao dịch hiện tại.

SET TRANSACTION transaction_mode [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

Trong đó transaction_mode là một trong -

ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED
| READ UNCOMMITTED }
READ WRITE | READ ONLY

CHỈ

Hiển thị giá trị của một tham số thời gian chạy.

SHOW name
SHOW ALL

BẮT ĐẦU GIAO DỊCH

Bắt đầu một khối giao dịch.

START TRANSACTION [ transaction_mode [, ...] ]

Trong đó transaction_mode là một trong -

ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED
| READ UNCOMMITTED }
READ WRITE | READ ONLY

TRUNCATE

Làm trống bàn.

TRUNCATE [ TABLE ] name

UNLISTEN

Ngừng nghe thông báo.

UNLISTEN { name | * }

CẬP NHẬT

Cập nhật các hàng của bảng.

UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...]
[ FROM from_list ]
[ WHERE condition ]

MÁY HÚT BỤI

Thu thập rác và tùy chọn phân tích cơ sở dữ liệu.

VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table ]
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table [ (column [, ...] ) ] ]

Trong chương này, chúng ta sẽ thảo luận về các kiểu dữ liệu được sử dụng trong PostgreSQL. Trong khi tạo bảng, đối với mỗi cột, bạn chỉ định kiểu dữ liệu, tức là loại dữ liệu bạn muốn lưu trữ trong các trường của bảng.

Điều này mang lại một số lợi ích -

  • Consistency - Các phép toán so với các cột có cùng kiểu dữ liệu cho kết quả nhất quán và thường là nhanh nhất.

  • Validation - Việc sử dụng đúng kiểu dữ liệu có nghĩa là xác nhận định dạng của dữ liệu và từ chối dữ liệu nằm ngoài phạm vi của kiểu dữ liệu.

  • Compactness - Là một cột có thể lưu trữ một loại giá trị duy nhất, nó được lưu trữ một cách nhỏ gọn.

  • Performance- Sử dụng hợp lý các kiểu dữ liệu mang lại hiệu quả lưu trữ dữ liệu cao nhất. Các giá trị được lưu trữ có thể được xử lý nhanh chóng, giúp nâng cao hiệu suất.

PostgreSQL hỗ trợ một loạt các Kiểu dữ liệu. Bên cạnh đó, người dùng có thể tạo kiểu dữ liệu tùy chỉnh của riêng mình bằng lệnh CREATE TYPE SQL. Có nhiều danh mục kiểu dữ liệu khác nhau trong PostgreSQL. Chúng được thảo luận dưới đây.

Các loại số

Các kiểu số bao gồm các số nguyên hai byte, bốn byte và tám byte, số dấu phẩy động bốn byte và tám byte và số thập phân có độ chính xác có thể chọn. Bảng sau liệt kê các loại có sẵn.

Tên Kích thước lưu trữ Sự miêu tả Phạm vi
lửa 2 byte số nguyên phạm vi nhỏ -32768 đến +32767
số nguyên 4 byte sự lựa chọn điển hình cho số nguyên -2147483648 đến +2147483647
bigint 8 byte số nguyên phạm vi lớn -9223372036854775808 đến 9223372036854775807
thập phân Biến đổi độ chính xác do người dùng chỉ định, chính xác lên đến 131072 chữ số trước dấu thập phân; lên đến 16383 chữ số sau dấu thập phân
số Biến đổi độ chính xác do người dùng chỉ định, chính xác lên đến 131072 chữ số trước dấu thập phân; lên đến 16383 chữ số sau dấu thập phân
thực tế 4 byte độ chính xác thay đổi, không chính xác 6 chữ số thập phân chính xác
chính xác gấp đôi 8 byte độ chính xác thay đổi, không chính xác 15 chữ số thập phân chính xác
tài liệu nhỏ 2 byte số nguyên tự động cộng nhỏ 1 đến 32767
nối tiếp 4 byte tự động cộng gộp số nguyên 1 đến 2147483647
quan trọng 8 byte số nguyên tự động cộng gộp lớn 1 đến 9223372036854775807

Các loại tiền

Các tiền kiểu lưu trữ một lượng tiền tệ với một độ chính xác phân đoạn cố định. Giá trị của các kiểu dữ liệu số, int và bigint có thể được chuyển thành tiền . Không nên sử dụng số Dấu phẩy động để xử lý tiền do có thể xảy ra lỗi làm tròn.

Tên Kích thước lưu trữ Sự miêu tả Phạm vi
tiền bạc 8 byte lượng ngoại tệ -92233720368547758,08 đến +92233720368547758,07

Các loại ký tự

Bảng dưới đây liệt kê các kiểu ký tự có mục đích chung có sẵn trong PostgreSQL.

S. Không. Tên & Mô tả
1

character varying(n), varchar(n)

chiều dài thay đổi có giới hạn

2

character(n), char(n)

chiều dài cố định, có đệm trống

3

text

chiều dài biến đổi không giới hạn

Kiểu dữ liệu nhị phân

Kiểu dữ liệu bytea cho phép lưu trữ các chuỗi nhị phân như trong bảng dưới đây.

Tên Kích thước lưu trữ Sự miêu tả
bytea 1 hoặc 4 byte cộng với chuỗi nhị phân thực tế chuỗi nhị phân có độ dài thay đổi

Loại ngày / giờ

PostgreSQL hỗ trợ một tập hợp đầy đủ các kiểu ngày và giờ của SQL, như được hiển thị trong bảng bên dưới. Ngày được tính theo lịch Gregory. Ở đây, tất cả các loại đều có độ phân giải1 microsecond / 14 digits ngoại trừ date loại, có độ phân giải là day.

Tên Kích thước lưu trữ Sự miêu tả Giá trị thấp Giá trị cao
dấu thời gian [(p)] [không có múi giờ] 8 byte cả ngày và giờ (không có múi giờ) 4713 trước công nguyên 294276 SCN
TIMESTAMPTZ 8 byte cả ngày và giờ, với múi giờ 4713 trước công nguyên 294276 SCN
ngày 4 byte ngày (không có thời gian trong ngày) 4713 trước công nguyên 5874897 SCN
time [(p)] [không có múi giờ] 8 byte thời gian trong ngày (không có ngày) 00:00:00 24:00:00
time [(p)] với múi giờ 12 byte chỉ thời gian trong ngày, với múi giờ 00: 00: 00 + 1459 24: 00: 00-1459
khoảng thời gian [các trường] [(p)] 12 byte Khoảng thời gian -178000000 năm 178000000 năm

Loại Boolean

PostgreSQL cung cấp kiểu Boolean SQL tiêu chuẩn. Kiểu dữ liệu Boolean có thể có trạng thái true , false và trạng thái thứ ba, không xác định , được biểu thị bằng giá trị rỗng trong SQL.

Tên Kích thước lưu trữ Sự miêu tả
boolean 1 byte trạng thái đúng hay sai

Loại được liệt kê

Kiểu liệt kê (enum) là kiểu dữ liệu bao gồm một tập giá trị tĩnh, có thứ tự. Chúng tương đương với các kiểu enum được hỗ trợ trong một số ngôn ngữ lập trình.

Không giống như các kiểu khác, Kiểu liệt kê cần được tạo bằng lệnh CREATE TYPE. Loại này được sử dụng để lưu trữ một bộ giá trị tĩnh, có thứ tự. Ví dụ hướng la bàn, tức là BẮC, NAM, ĐÔNG và TÂY hoặc các ngày trong tuần như hình dưới đây -

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

Enumerated, sau khi được tạo, có thể được sử dụng giống như bất kỳ loại nào khác.

Loại hình học

Các kiểu dữ liệu hình học đại diện cho các đối tượng không gian hai chiều. Loại cơ bản nhất, điểm, tạo cơ sở cho tất cả các loại khác.

Tên Kích thước lưu trữ Đại diện Sự miêu tả
điểm 16 byte Chỉ trên một mặt phẳng (x, y)
hàng 32 byte Dòng vô hạn (không được triển khai đầy đủ) ((x1, y1), (x2, y2))
lseg 32 byte Đoạn thẳng hữu hạn ((x1, y1), (x2, y2))
cái hộp 32 byte Hộp hình chữ nhật ((x1, y1), (x2, y2))
con đường 16 + 16n byte Đường dẫn đóng (tương tự như đa giác) ((x1, y1), ...)
con đường 16 + 16n byte Con đường mở [(x1, y1), ...]
đa giác 40 + 16n Đa giác (tương tự như đường dẫn đóng) ((x1, y1), ...)
vòng tròn 24 byte Vòng tròn <(x, y), r> (tâm điểm và bán kính)

Loại địa chỉ mạng

PostgreSQL cung cấp các kiểu dữ liệu để lưu trữ địa chỉ IPv4, IPv6 và MAC. Tốt hơn là sử dụng các loại này thay vì các loại văn bản thuần túy để lưu trữ địa chỉ mạng, vì các loại này cung cấp tính năng kiểm tra lỗi đầu vào và các toán tử và chức năng chuyên biệt.

Tên Kích thước lưu trữ Sự miêu tả
cidr 7 hoặc 19 byte Mạng IPv4 và IPv6
inet 7 hoặc 19 byte Máy chủ và mạng IPv4 và IPv6
macaddr 6 byte Địa chỉ MAC

Loại chuỗi bit

Loại chuỗi bit được sử dụng để lưu trữ mặt nạ bit. Chúng là 0 hoặc 1. Có hai kiểu bit SQL:bit(n)bit varying(n), với n là một số nguyên dương.

Loại tìm kiếm văn bản

Loại này hỗ trợ tìm kiếm toàn văn, là hoạt động tìm kiếm thông qua một bộ sưu tập các tài liệu bằng ngôn ngữ tự nhiên để tìm những tài liệu phù hợp nhất với một truy vấn. Có hai Loại Dữ liệu cho việc này -

S. Không. Tên & Mô tả
1

tsvector

Đây là danh sách được sắp xếp gồm các từ riêng biệt đã được chuẩn hóa để hợp nhất các biến thể khác nhau của cùng một từ, được gọi là "lexemes".

2

tsquery

Công cụ này lưu trữ các từ vựng cần tìm và kết hợp chúng theo các toán tử Boolean & (AND), | (Hoặc và ! (KHÔNG PHẢI). Dấu ngoặc đơn có thể được sử dụng để thực thi nhóm các toán tử.

Loại UUID

UUID (Số nhận dạng duy nhất phổ biến) được viết dưới dạng một chuỗi các chữ số thập lục phân viết thường, trong một số nhóm được phân tách bằng dấu gạch ngang, cụ thể là một nhóm tám chữ số, tiếp theo là ba nhóm bốn chữ số, tiếp theo là một nhóm 12 chữ số, cho tổng số 32 chữ số đại diện cho 128 bit.

Ví dụ về UUID là - 550e8400-e29b-41d4-a716-446655440000

Loại XML

Kiểu dữ liệu XML có thể được sử dụng để lưu trữ dữ liệu XML. Để lưu trữ dữ liệu XML, trước tiên bạn phải tạo các giá trị XML bằng cách sử dụng hàm xmlparse như sau:

XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<tutorial>
<title>PostgreSQL Tutorial </title>
   <topics>...</topics>
</tutorial>')

XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

Loại JSON

Kiểu dữ liệu json có thể được sử dụng để lưu trữ dữ liệu JSON (JavaScript Object Notation). Dữ liệu như vậy cũng có thể được lưu trữ dưới dạng văn bản , nhưng kiểu dữ liệu json có lợi thế là kiểm tra rằng mỗi giá trị được lưu trữ là một giá trị JSON hợp lệ. Ngoài ra còn có các chức năng hỗ trợ liên quan có sẵn, có thể được sử dụng trực tiếp để xử lý kiểu dữ liệu JSON như sau.

Thí dụ Kết quả mẫu
array_to_json ('{{1,5}, {99,100}}' :: int []) [[1,5], [99,100]]
row_to_json (row (1, 'foo')) {"f1": 1, "f2": "foo"}

Loại mảng

PostgreSQL mang lại cơ hội xác định một cột của bảng dưới dạng một mảng đa chiều có độ dài thay đổi. Mảng của bất kỳ kiểu cơ sở, kiểu enum hoặc kiểu kết hợp nào được tích hợp sẵn hoặc do người dùng xác định đều có thể được tạo.

Khai báo mảng

Kiểu mảng có thể được khai báo là

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer[],
   scheme text[][]
);

hoặc bằng cách sử dụng từ khóa "ARRAY" làm

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer ARRAY[4],
   scheme text[][]
);

Chèn giá trị

Giá trị mảng có thể được chèn dưới dạng một hằng số, bao quanh các giá trị phần tử trong dấu ngoặc nhọn và phân tách chúng bằng dấu phẩy. Một ví dụ được hiển thị bên dưới -

INSERT INTO monthly_savings 
VALUES (‘Manisha’, 
‘{20000, 14600, 23500, 13250}’, 
‘{{“FD”, “MF”}, {“FD”, “Property”}}’);

Truy cập Mảng

Một ví dụ để truy cập Mảng được hiển thị bên dưới. Lệnh dưới đây sẽ chọn những người có số tiền tiết kiệm trong quý II nhiều hơn quý IV.

SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];

Sửa đổi mảng

Một ví dụ về sửa đổi mảng như được hiển thị bên dưới.

UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Manisha';

hoặc sử dụng cú pháp biểu thức ARRAY -

UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Manisha';

Tìm kiếm Mảng

Ví dụ về tìm kiếm mảng như hình dưới đây.

SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR
saving_per_quarter[2] = 10000 OR
saving_per_quarter[3] = 10000 OR
saving_per_quarter[4] = 10000;

Nếu kích thước của mảng được biết, có thể sử dụng phương pháp tìm kiếm ở trên. Ngoài ra, ví dụ sau cho thấy cách tìm kiếm khi không biết kích thước.

SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);

Các loại hỗn hợp

Kiểu này đại diện cho danh sách các tên trường và kiểu dữ liệu của chúng, tức là cấu trúc của một hàng hoặc bản ghi của bảng.

Khai báo các loại kết hợp

Ví dụ sau đây cho thấy cách khai báo một kiểu kết hợp

CREATE TYPE inventory_item AS (
   name text,
   supplier_id integer,
   price numeric
);

Kiểu dữ liệu này có thể được sử dụng trong các bảng tạo như sau:

CREATE TABLE on_hand (
   item inventory_item,
   count integer
);

Đầu vào giá trị tổng hợp

Giá trị tổng hợp có thể được chèn dưới dạng hằng số chữ, bao quanh các giá trị trường trong dấu ngoặc đơn và phân tách chúng bằng dấu phẩy. Một ví dụ được hiển thị bên dưới -

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

Điều này hợp lệ cho kho_item được xác định ở trên. Từ khóa ROW thực sự là tùy chọn miễn là bạn có nhiều trường trong biểu thức.

Truy cập các loại hỗn hợp

Để truy cập một trường của cột tổng hợp, hãy sử dụng một dấu chấm theo sau tên trường, giống như chọn một trường từ tên bảng. Ví dụ: để chọn một số trường con từ bảng ví dụ on_hand của chúng tôi, truy vấn sẽ như được hiển thị bên dưới:

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

Bạn thậm chí có thể sử dụng tên bảng (ví dụ: trong một truy vấn nhiều bảng), như thế này:

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

Các loại phạm vi

Loại phạm vi đại diện cho các kiểu dữ liệu sử dụng một phạm vi dữ liệu. Loại phạm vi có thể là phạm vi rời rạc (ví dụ: tất cả các giá trị nguyên từ 1 đến 10) hoặc phạm vi liên tục (ví dụ: bất kỳ thời điểm nào trong khoảng thời gian từ 10:00 sáng đến 11:00 sáng).

Các loại phạm vi tích hợp sẵn có bao gồm các phạm vi sau:

  • int4range - Phạm vi số nguyên

  • int8range - Phạm vi của bigint

  • numrange - Phạm vi số

  • tsrange - Phạm vi dấu thời gian không có múi giờ

  • tstzrange - Phạm vi dấu thời gian với múi giờ

  • daterange - Phạm vi ngày

Các loại phạm vi tùy chỉnh có thể được tạo để cung cấp các loại phạm vi mới, chẳng hạn như phạm vi địa chỉ IP sử dụng loại inet làm cơ sở hoặc phạm vi float sử dụng kiểu dữ liệu float làm cơ sở.

Loại phạm vi hỗ trợ các ranh giới phạm vi bao gồm và riêng biệt bằng cách sử dụng các ký tự [] và (), tương ứng. Ví dụ '[4,9)' đại diện cho tất cả các số nguyên bắt đầu từ và bao gồm 4 đến nhưng không bao gồm 9.

Các loại mã định danh đối tượng

Mã định danh đối tượng (OID) được PostgreSQL sử dụng nội bộ làm khóa chính cho các bảng hệ thống khác nhau. Nếu WITH OIDS được chỉ định hoặc biến cấu hình default_with_oids được bật thì chỉ khi đó, trong những trường hợp như vậy, OID mới được thêm vào các bảng do người dùng tạo. Bảng sau đây liệt kê một số loại bí danh. Các loại bí danh OID không có hoạt động của riêng chúng ngoại trừ các quy trình đầu vào và đầu ra chuyên biệt.

Tên Người giới thiệu Sự miêu tả Ví dụ về giá trị
oid bất kì định danh đối tượng số 564182
regproc pg_proc Tên chức năng Tổng
sự bắt buộc pg_proc hàm với các loại đối số sum (int4)
người đăng ký pg_operator Tên người vận hành +
người điều hành pg_operator toán tử với các loại đối số * (số nguyên, số nguyên) hoặc - (KHÔNG, số nguyên)
xếp loại pg_class tên quan hệ pg_type
kiểu viết lại pg_type tên kiểu dữ liệu số nguyên
regconfig pg_ts_config cấu hình tìm kiếm văn bản Tiếng Anh
phản đối pg_ts_dict từ điển tìm kiếm văn bản đơn giản

Các loại giả

Hệ thống kiểu PostgreSQL chứa một số mục nhập có mục đích đặc biệt được gọi chung là kiểu giả. Kiểu giả không thể được sử dụng làm kiểu dữ liệu cột, nhưng nó có thể được sử dụng để khai báo kiểu đối số hoặc kết quả của một hàm.

Bảng dưới đây liệt kê các kiểu giả hiện có.

S. Không. Tên & Mô tả
1

any

Cho biết một hàm chấp nhận bất kỳ kiểu dữ liệu đầu vào nào.

2

anyelement

Cho biết rằng một hàm chấp nhận bất kỳ kiểu dữ liệu nào.

3

anyarray

Cho biết rằng một hàm chấp nhận bất kỳ kiểu dữ liệu mảng nào.

4

anynonarray

Chỉ ra rằng một hàm chấp nhận bất kỳ kiểu dữ liệu không phải là mảng nào.

5

anyenum

Chỉ ra rằng một hàm chấp nhận bất kỳ kiểu dữ liệu enum nào.

6

anyrange

Cho biết rằng một hàm chấp nhận bất kỳ kiểu dữ liệu phạm vi nào.

7

cstring

Chỉ ra rằng một hàm chấp nhận hoặc trả về một chuỗi C kết thúc bằng rỗng.

số 8

internal

Cho biết một hàm chấp nhận hoặc trả về kiểu dữ liệu nội bộ của máy chủ.

9

language_handler

Một trình xử lý cuộc gọi ngôn ngữ thủ tục được khai báo để trả về language_handler.

10

fdw_handler

Một trình xử lý trình bao bọc dữ liệu nước ngoài được khai báo để trả về fdw_handler.

11

record

Xác định một hàm trả về loại hàng không xác định.

12

trigger

Một hàm kích hoạt được khai báo để trả về kích hoạt.

13

void

Cho biết rằng một hàm không trả về giá trị nào.

Chương này thảo luận về cách tạo cơ sở dữ liệu mới trong PostgreSQL của bạn. PostgreSQL cung cấp hai cách tạo cơ sở dữ liệu mới -

  • Sử dụng TẠO CƠ SỞ DỮ LIỆU, một lệnh SQL.
  • Sử dụng createb một tệp thực thi dòng lệnh.

Sử dụng TẠO CƠ SỞ DỮ LIỆU

Lệnh này sẽ tạo cơ sở dữ liệu từ dấu nhắc trình bao PostgreSQL, nhưng bạn phải có đặc quyền thích hợp để tạo cơ sở dữ liệu. Theo mặc định, cơ sở dữ liệu mới sẽ được tạo bằng cách sao chép mẫu cơ sở dữ liệu hệ thống chuẩn1 .

Cú pháp

Cú pháp cơ bản của câu lệnh CREATE DATABASE như sau:

CREATE DATABASE dbname;

trong đó dbname là tên của cơ sở dữ liệu cần tạo.

Thí dụ

Sau đây là một ví dụ đơn giản, sẽ tạo ra testdb trong lược đồ PostgreSQL của bạn

postgres=# CREATE DATABASE testdb;
postgres-#

Sử dụng lệnh createb

Dòng lệnh PostgreSQL có thể thực thi được createb là một trình bao bọc xung quanh lệnh SQL CREATE DATABASE . Sự khác biệt duy nhất giữa lệnh này và lệnh SQL CREATE DATABASE là lệnh trước có thể được chạy trực tiếp từ dòng lệnh và nó cho phép thêm nhận xét vào cơ sở dữ liệu, tất cả trong một lệnh.

Cú pháp

Cú pháp cho createb như hình dưới đây:

createdb [option...] [dbname [description]]

Thông số

Bảng dưới đây liệt kê các tham số cùng với mô tả của chúng.

S. Không. Mô tả về Thông Số
1

dbname

Tên của một cơ sở dữ liệu để tạo.

2

description

Chỉ định một nhận xét được liên kết với cơ sở dữ liệu mới được tạo.

3

options

đối số dòng lệnh, được createb chấp nhận.

Tùy chọn

Bảng sau liệt kê các đối số dòng lệnh do createb chấp nhận:

S. Không. Tùy chọn & Mô tả
1

-D tablespace

Chỉ định vùng bảng mặc định cho cơ sở dữ liệu.

2

-e

Echo các lệnh do createb tạo và gửi đến máy chủ.

3

-E encoding

Chỉ định lược đồ mã hóa ký tự sẽ được sử dụng trong cơ sở dữ liệu này.

4

-l locale

Chỉ định ngôn ngữ sẽ được sử dụng trong cơ sở dữ liệu này.

5

-T template

Chỉ định cơ sở dữ liệu mẫu để xây dựng cơ sở dữ liệu này.

6

--help

Hiển thị trợ giúp về các đối số dòng lệnh createb và thoát.

7

-h host

Chỉ định tên máy chủ của máy mà máy chủ đang chạy.

số 8

-p port

Chỉ định cổng TCP hoặc phần mở rộng tệp ổ cắm miền Unix cục bộ mà máy chủ đang lắng nghe kết nối.

9

-U username

Tên người dùng để kết nối với tư cách.

10

-w

Không bao giờ đưa ra lời nhắc mật khẩu.

11

-W

Buộc createb nhắc nhập mật khẩu trước khi kết nối với cơ sở dữ liệu.

Mở dấu nhắc lệnh và đi đến thư mục nơi PostgreSQL được cài đặt. Chuyển đến thư mục bin và thực hiện lệnh sau để tạo cơ sở dữ liệu.

createdb -h localhost -p 5432 -U postgres testdb
password ******

Lệnh đã cho ở trên sẽ nhắc bạn nhập mật khẩu của người dùng quản trị PostgreSQL, đó là postgres, theo mặc định. Do đó, hãy cung cấp mật khẩu và tiến hành tạo cơ sở dữ liệu mới của bạn

Sau khi cơ sở dữ liệu được tạo bằng một trong các phương pháp nêu trên, bạn có thể kiểm tra nó trong danh sách cơ sở dữ liệu bằng cách sử dụng \l, tức là, lệnh el gạch chéo ngược như sau:

postgres-# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 testdb    | postgres | UTF8     | C       | C     | 
(4 rows)

postgres-#

Chương này giải thích các phương pháp truy cập cơ sở dữ liệu khác nhau. Giả sử rằng chúng ta đã tạo một cơ sở dữ liệu trong chương trước. Bạn có thể chọn cơ sở dữ liệu bằng cách sử dụng một trong các phương pháp sau:

  • Cơ sở dữ liệu SQL Prompt
  • OS Command Prompt

Cơ sở dữ liệu SQL Prompt

Giả sử bạn đã khởi chạy ứng dụng khách PostgreSQL của mình và bạn đã đến được lời nhắc SQL sau:

postgres=#

Bạn có thể kiểm tra danh sách cơ sở dữ liệu có sẵn bằng cách sử dụng \l, tức là, lệnh el gạch chéo ngược như sau:

postgres-# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 testdb    | postgres | UTF8     | C       | C     | 
(4 rows)

postgres-#

Bây giờ, gõ lệnh sau để kết nối / chọn một cơ sở dữ liệu mong muốn; ở đây, chúng tôi sẽ kết nối với cơ sở dữ liệu testdb .

postgres=# \c testdb;
psql (9.2.4)
Type "help" for help.
You are now connected to database "testdb" as user "postgres".
testdb=#

OS Command Prompt

Bạn có thể chọn cơ sở dữ liệu của mình từ chính dấu nhắc lệnh tại thời điểm bạn đăng nhập vào cơ sở dữ liệu của mình. Sau đây là một ví dụ đơn giản -

psql -h localhost -p 5432 -U postgress testdb
Password for user postgress: ****
psql (9.2.4)
Type "help" for help.
You are now connected to database "testdb" as user "postgres".
testdb=#

Bây giờ bạn đã đăng nhập vào PostgreSQL testdb và sẵn sàng thực hiện các lệnh của mình bên trong testdb. Để thoát khỏi cơ sở dữ liệu, bạn có thể sử dụng lệnh \ q.

Trong chương này, chúng ta sẽ thảo luận về cách xóa cơ sở dữ liệu trong PostgreSQL. Có hai tùy chọn để xóa cơ sở dữ liệu -

  • Sử dụng DROP DATABASE, một lệnh SQL.
  • Sử dụng dropdb một tệp thực thi dòng lệnh.
Hãy cẩn thận trước khi sử dụng thao tác này vì xóa cơ sở dữ liệu hiện có sẽ làm mất thông tin đầy đủ được lưu trữ trong cơ sở dữ liệu.

Sử dụng DROP DATABASE

Lệnh này thả một cơ sở dữ liệu. Nó loại bỏ các mục danh mục cho cơ sở dữ liệu và xóa thư mục chứa dữ liệu. Nó chỉ có thể được thực thi bởi chủ sở hữu cơ sở dữ liệu. Lệnh này không thể được thực thi khi bạn hoặc bất kỳ ai khác được kết nối với cơ sở dữ liệu đích (kết nối với postgres hoặc bất kỳ cơ sở dữ liệu nào khác để đưa ra lệnh này).

Cú pháp

Cú pháp cho DROP DATABASE được đưa ra dưới đây:

DROP DATABASE [ IF EXISTS ] name

Thông số

Bảng liệt kê các tham số với mô tả của chúng.

S. Không. Mô tả về Thông Số
1

IF EXISTS

Đừng đưa ra lỗi nếu cơ sở dữ liệu không tồn tại. Một thông báo được phát hành trong trường hợp này.

2

name

Tên của cơ sở dữ liệu cần xóa.

Chúng tôi không thể bỏ cơ sở dữ liệu có bất kỳ kết nối nào đang mở, bao gồm cả kết nối của chúng tôi từ psql hoặc pgAdmin III . Chúng ta phải chuyển sang cơ sở dữ liệu khác hoặc template1 nếu chúng ta muốn xóa cơ sở dữ liệu mà chúng ta hiện đang kết nối. Do đó, có thể thuận tiện hơn khi sử dụng chương trình dropdb , là một trình bao bọc xung quanh lệnh này.

Thí dụ

Sau đây là một ví dụ đơn giản, sẽ xóa testdb từ lược đồ PostgreSQL của bạn -

postgres=# DROP DATABASE testdb;
postgres-#

Sử dụng lệnh dropdb

Dòng lệnh PostgresSQL có thể thực thi dropdblà một trình bao bọc dòng lệnh xung quanh lệnh SQL DROP DATABASE . Không có sự khác biệt hiệu quả giữa việc giảm cơ sở dữ liệu thông qua tiện ích này và thông qua các phương pháp khác để truy cập máy chủ. dropdb phá hủy cơ sở dữ liệu PostgreSQL hiện có. Người dùng thực thi lệnh này phải là siêu người dùng cơ sở dữ liệu hoặc chủ sở hữu của cơ sở dữ liệu.

Cú pháp

Cú pháp cho dropdb như hình dưới đây:

dropdb  [option...] dbname

Thông số

Bảng sau liệt kê các tham số cùng với mô tả của chúng

S. Không. Mô tả về Thông Số
1

dbname

Tên của cơ sở dữ liệu sẽ bị xóa.

2

option

đối số dòng lệnh mà dropdb chấp nhận.

Tùy chọn

Bảng sau liệt kê các đối số dòng lệnh mà dropdb chấp nhận:

S. Không. Tùy chọn & Mô tả
1

-e

Hiển thị các lệnh được gửi đến máy chủ.

2

-i

Đưa ra lời nhắc xác minh trước khi làm bất cứ điều gì phá hoại.

3

-V

In phiên bản dropdb và thoát.

4

--if-exists

Đừng đưa ra lỗi nếu cơ sở dữ liệu không tồn tại. Một thông báo được phát hành trong trường hợp này.

5

--help

Hiển thị trợ giúp về đối số dòng lệnh dropdb và thoát.

6

-h host

Chỉ định tên máy chủ của máy mà máy chủ đang chạy.

7

-p port

Chỉ định cổng TCP hoặc phần mở rộng tệp ổ cắm miền UNIX cục bộ mà máy chủ đang lắng nghe kết nối.

số 8

-U username

Tên người dùng để kết nối với tư cách.

9

-w

Không bao giờ đưa ra lời nhắc mật khẩu.

10

-W

Buộc dropdb nhắc nhập mật khẩu trước khi kết nối với cơ sở dữ liệu.

11

--maintenance-db=dbname

Chỉ định tên của cơ sở dữ liệu để kết nối để thả cơ sở dữ liệu đích.

Thí dụ

Ví dụ sau minh họa việc xóa cơ sở dữ liệu khỏi dấu nhắc lệnh OS:

dropdb -h localhost -p 5432 -U postgress testdb
Password for user postgress: ****

Lệnh trên bỏ cơ sở dữ liệu testdb. Ở đây, tôi đã sử dụngpostgres (tìm thấy trong tên người dùng pg_roles của template1) để thả cơ sở dữ liệu.

Câu lệnh PostgreSQL CREATE TABLE được sử dụng để tạo một bảng mới trong bất kỳ cơ sở dữ liệu đã cho.

Cú pháp

Cú pháp cơ bản của câu lệnh CREATE TABLE như sau:

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

CREATE TABLE là một từ khóa, yêu cầu hệ thống cơ sở dữ liệu tạo một bảng mới. Tên hoặc mã định danh duy nhất cho bảng tuân theo câu lệnh CREATE TABLE. Ban đầu, bảng trống trong cơ sở dữ liệu hiện tại thuộc sở hữu của người dùng ban hành lệnh.

Sau đó, trong dấu ngoặc sẽ xuất hiện danh sách, xác định từng cột trong bảng và loại dữ liệu đó là. Cú pháp sẽ trở nên rõ ràng với một ví dụ dưới đây.

Ví dụ

Sau đây là một ví dụ, tạo một bảng COMPANY với ID là khóa chính và NOT NULL là các ràng buộc cho thấy rằng các trường này không thể là NULL khi tạo bản ghi trong bảng này -

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Hãy để chúng tôi tạo thêm một bảng, chúng tôi sẽ sử dụng bảng này trong các bài tập của mình trong các chương tiếp theo -

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

Bạn có thể xác minh xem bảng của mình đã được tạo thành công hay chưa bằng cách sử dụng \d lệnh này sẽ được sử dụng để liệt kê tất cả các bảng trong cơ sở dữ liệu đính kèm.

testdb-# \d

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

List of relations
 Schema |    Name    | Type  |  Owner
--------+------------+-------+----------
 public | company    | table | postgres
 public | department | table | postgres
(2 rows)

Sử dụng \d tablename để mô tả từng bảng như hình dưới đây -

testdb-# \d company

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

Table "public.company"
  Column   |     Type      | Modifiers
-----------+---------------+-----------
 id        | integer       | not null
 name      | text          | not null
 age       | integer       | not null
 address   | character(50) |
 salary    | real          |
 join_date | date          |
Indexes:
    "company_pkey" PRIMARY KEY, btree (id)

Câu lệnh PostgreSQL DROP TABLE được sử dụng để xóa định nghĩa bảng và tất cả dữ liệu liên quan, chỉ mục, quy tắc, trình kích hoạt và ràng buộc cho bảng đó.

Bạn phải cẩn thận khi sử dụng lệnh này vì khi một bảng bị xóa thì tất cả thông tin có sẵn trong bảng cũng sẽ bị mất vĩnh viễn.

Cú pháp

Cú pháp cơ bản của câu lệnh DROP TABLE như sau:

DROP TABLE table_name;

Thí dụ

Chúng ta đã tạo các bảng DEPARTMENT và COMPANY trong chương trước. Trước tiên, hãy xác minh các bảng này (sử dụng\d để liệt kê các bảng) -

testdb-# \d

Điều này sẽ tạo ra kết quả sau:

List of relations
 Schema |    Name    | Type  |  Owner
--------+------------+-------+----------
 public | company    | table | postgres
 public | department | table | postgres
(2 rows)

Điều này có nghĩa là các bảng DEPARTMENT và COMPANY hiện diện. Vì vậy, chúng ta hãy thả chúng như sau:

testdb=# drop table department, company;

Điều này sẽ tạo ra kết quả sau:

DROP TABLE
testdb=# \d
relations found.
testdb=#

Thông báo trả về DROP TABLE cho biết lệnh thả được thực hiện thành công.

A schemalà một tập hợp các bảng được đặt tên. Một lược đồ cũng có thể chứa các dạng xem, chỉ mục, chuỗi, kiểu dữ liệu, toán tử và hàm. Các lược đồ tương tự như các thư mục ở cấp hệ điều hành, ngoại trừ việc các lược đồ không được lồng vào nhau. Câu lệnh PostgreSQL CREATE SCHEMA tạo một lược đồ.

Cú pháp

Cú pháp cơ bản của CREATE SCHEMA như sau:

CREATE SCHEMA name;

Trong đó tên là tên của lược đồ.

Cú pháp tạo bảng trong lược đồ

Cú pháp cơ bản để tạo bảng trong lược đồ như sau:

CREATE TABLE myschema.mytable (
...
);

Thí dụ

Hãy để chúng tôi xem một ví dụ để tạo một lược đồ. Kết nối với testdb cơ sở dữ liệu và tạo một lược đồ thần bí như sau:

testdb=# create schema myschema;
CREATE SCHEMA

Thông báo "CREATE SCHEMA" cho biết rằng lược đồ được tạo thành công.

Bây giờ, chúng ta hãy tạo một bảng trong lược đồ trên như sau:

testdb=# create table myschema.company(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25),
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Điều này sẽ tạo ra một bảng trống. Bạn có thể xác minh bảng được tạo bằng lệnh dưới đây:

testdb=# select * from myschema.company;

Điều này sẽ tạo ra kết quả sau:

id | name | age | address | salary
----+------+-----+---------+--------
(0 rows)

Cú pháp để thả giản đồ

Để thả một giản đồ nếu nó trống (tất cả các đối tượng trong nó đã bị loại bỏ), hãy sử dụng lệnh:

DROP SCHEMA myschema;

Để thả một lược đồ bao gồm tất cả các đối tượng được chứa, hãy sử dụng lệnh:

DROP SCHEMA myschema CASCADE;

Ưu điểm của việc sử dụng một lược đồ

  • Nó cho phép nhiều người dùng cùng sử dụng một cơ sở dữ liệu mà không can thiệp vào nhau.

  • Nó tổ chức các đối tượng cơ sở dữ liệu thành các nhóm hợp lý để làm cho chúng dễ quản lý hơn.

  • Các ứng dụng của bên thứ ba có thể được đưa vào các lược đồ riêng biệt để chúng không va chạm với tên của các đối tượng khác.

PostgreSQL INSERT INTOcâu lệnh cho phép người ta chèn các hàng mới vào bảng. Người ta có thể chèn một hàng tại một thời điểm hoặc một số hàng do kết quả của một truy vấn.

Cú pháp

Cú pháp cơ bản của câu lệnh INSERT INTO như sau:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
  • Ở đây, column1, column2, ... columnN là tên của các cột trong bảng mà bạn muốn chèn dữ liệu vào.

  • Tên cột mục tiêu có thể được liệt kê theo bất kỳ thứ tự nào. Các giá trị được cung cấp bởi mệnh đề VALUES hoặc truy vấn được liên kết với danh sách cột rõ ràng hoặc ẩn từ trái sang phải.

Bạn có thể không cần chỉ định (các) tên cột trong truy vấn SQL nếu bạn đang thêm giá trị cho tất cả các cột của bảng. Tuy nhiên, hãy đảm bảo rằng thứ tự của các giá trị theo cùng thứ tự với các cột trong bảng. Cú pháp INSERT INTO của SQL sẽ như sau:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

Đầu ra

Bảng sau đây tóm tắt các thông báo đầu ra và ý nghĩa của chúng:

S. Không. Thông báo đầu ra & mô tả
1

INSERT oid 1

Thông báo được trả lại nếu chỉ có một hàng được chèn. oid là OID số của hàng được chèn.

2

INSERT 0 #

Thông báo được trả lại nếu có nhiều hàng được chèn. # là số hàng được chèn.

Ví dụ

Hãy để chúng tôi tạo bảng CÔNG TY trong testdb như sau -

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   JOIN_DATE	  DATE
);

Ví dụ sau đây chèn một hàng vào bảng COMPANY -

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');

Ví dụ sau là chèn một hàng; ở đây cột lương bị bỏ qua và do đó nó sẽ có giá trị mặc định -

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,JOIN_DATE) VALUES (2, 'Allen', 25, 'Texas', '2007-12-13');

Ví dụ sau sử dụng mệnh đề DEFAULT cho cột JOIN_DATE thay vì chỉ định một giá trị -

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (3, 'Teddy', 23, 'Norway', 20000.00, DEFAULT );

Ví dụ sau đây chèn nhiều hàng bằng cú pháp nhiều giá trị -

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00, '2007-12-13' ), (5, 'David', 27, 'Texas', 85000.00, '2007-12-13');

Tất cả các câu lệnh trên sẽ tạo các bản ghi sau trong bảng COMPANY. Chương tiếp theo sẽ hướng dẫn bạn cách hiển thị tất cả các bản ghi này từ một bảng.

ID        NAME        AGE        ADDRESS     SALARY	  JOIN_DATE
----      ----------  -----      ----------  -------      --------
1         Paul        32         California  20000.0      2001-07-13
2         Allen       25         Texas                    2007-12-13
3         Teddy       23         Norway      20000.0
4         Mark        25         Rich-Mond   65000.0      2007-12-13
5         David       27         Texas       85000.0      2007-12-13

PostgreSQL SELECTcâu lệnh được sử dụng để tìm nạp dữ liệu từ một bảng cơ sở dữ liệu, bảng này sẽ trả về dữ liệu ở dạng bảng kết quả. Các bảng kết quả này được gọi là tập kết quả.

Cú pháp

Cú pháp cơ bản của câu lệnh SELECT như sau:

SELECT column1, column2, columnN FROM table_name;

Ở đây, column1, column2 ... là các trường của một bảng, có các giá trị mà bạn muốn tìm nạp. Nếu bạn muốn tìm nạp tất cả các trường có sẵn trong trường thì bạn có thể sử dụng cú pháp sau:

SELECT * FROM table_name;

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ lấy các trường ID, Tên và Mức lương của các khách hàng có sẵn trong bảng CUSTOMERS -

testdb=# SELECT ID, NAME, SALARY FROM COMPANY ;

Điều này sẽ tạo ra kết quả sau:

id | name  | salary
 ----+-------+--------
   1 | Paul  |  20000
   2 | Allen |  15000
   3 | Teddy |  20000
   4 | Mark  |  65000
   5 | David |  85000
   6 | Kim   |  45000
   7 | James |  10000
(7 rows)

Nếu bạn muốn tìm nạp tất cả các trường của bảng CUSTOMERS, hãy sử dụng truy vấn sau:

testdb=# SELECT * FROM COMPANY;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Toán tử trong PostgreSQL là gì?

Toán tử là một từ dành riêng hoặc một ký tự được sử dụng chủ yếu trong mệnh đề WHERE của câu lệnh PostgreSQL để thực hiện (các) hoạt động, chẳng hạn như so sánh và các phép toán số học.

Các toán tử được sử dụng để chỉ định các điều kiện trong một câu lệnh PostgreSQL và dùng làm các liên từ cho nhiều điều kiện trong một câu lệnh.

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử logic
  • Toán tử bitwise

Toán tử số học PostgreSQL

Giả sử biến a giữ 2 và biến b giữ 3, sau đó -

Thí dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Phép cộng - Thêm giá trị vào hai bên của toán tử a + b sẽ cho 5
- Phép trừ - Trừ toán hạng bên phải khỏi toán hạng bên trái a - b sẽ cho -1
* Phép nhân - Nhân các giá trị ở một trong hai bên của toán tử a * b sẽ cho 6
/ Phép chia - Chia toán hạng bên trái cho toán hạng bên phải b / a sẽ cho 1
% Mô-đun - Chia toán hạng bên trái cho toán hạng bên phải và trả về phần dư b% a sẽ cho 1
^ Luỹ thừa - Điều này cho giá trị lũy thừa của toán hạng bên phải a ^ b sẽ cho 8
| / căn bậc hai | / 25.0 sẽ cho 5
|| / Gốc lập phương || / 27.0 sẽ cho 3
! yếu tố 5! sẽ cho 120
!! giai thừa (toán tử tiền tố) !! 5 sẽ cho 120

Toán tử so sánh PostgreSQL

Giả sử biến a giữ 10 và biến b giữ 20, thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (a = b) không đúng.
! = Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (a! = b) là đúng.
<> Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (a <> b) là đúng.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a> b) không đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a <b) là đúng.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a> = b) không đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (a <= b) là đúng.

Các toán tử logic PostgreSQL

Đây là danh sách tất cả các toán tử logic có sẵn trong PostgresSQL.

Hiển thị các ví dụ

S. Không. Nhà điều hành & Mô tả
1

AND

Toán tử AND cho phép tồn tại nhiều điều kiện trong mệnh đề WHERE của câu lệnh PostgresSQL.

2

NOT

Toán tử NOT đảo ngược ý nghĩa của toán tử logic mà nó được sử dụng. Ví dụ. KHÔNG TỒN TẠI, KHÔNG GIỮA, KHÔNG VÀO v.v.This is negate operator.

3

OR

Toán tử OR được sử dụng để kết hợp nhiều điều kiện trong mệnh đề WHERE của câu lệnh PostgresSQL.

Toán tử chuỗi bit PostgreSQL

Toán tử bitwise hoạt động trên các bit và thực hiện hoạt động từng bit. Bảng chân lý cho & và | như sau -

p q p & q p | q
0 0 0 0
0 1 0 1
1 1 1 1
1 0 0 1

Giả sử nếu A = 60; và B = 13; bây giờ ở định dạng nhị phân, chúng sẽ như sau:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A | B = 0011 1101

~ A = 1100 0011

Hiển thị các ví dụ

Các toán tử Bitwise được hỗ trợ bởi PostgreSQL được liệt kê trong bảng sau:

Nhà điều hành Sự miêu tả Thí dụ
& Toán tử AND nhị phân sao chép một bit vào kết quả nếu nó tồn tại trong cả hai toán hạng. (A & B) sẽ cho kết quả 12 là 0000 1100
| Toán tử OR nhị phân sao chép một bit nếu nó tồn tại trong một trong hai toán hạng. (A | B) sẽ cho 61 là 0011 1101
~ Toán tử bổ sung số nhị phân là một ngôi và có tác dụng 'lật' các bit. (~ A) sẽ cho -61 là 1100 0011 ở dạng phần bù của 2 do một số nhị phân có dấu.
<< Toán tử dịch chuyển trái nhị phân. Giá trị toán hạng bên trái được di chuyển sang trái bằng số bit được chỉ định bởi toán hạng bên phải. A << 2 sẽ cho 240 là 1111 0000
>> Toán tử Shift phải nhị phân. Giá trị của toán hạng bên trái được di chuyển sang phải bằng số bit được chỉ định bởi toán hạng bên phải. A >> 2 sẽ cho 15 là 0000 1111
# bitwise XOR. A # B sẽ cho 49 là 0100 1001

Một biểu thức là sự kết hợp của một hoặc nhiều giá trị, toán tử và các hàm PostgresSQL đánh giá thành một giá trị.

PostgreSQL EXPRESSIONS giống như các công thức và chúng được viết bằng ngôn ngữ truy vấn. Bạn cũng có thể sử dụng để truy vấn cơ sở dữ liệu cho tập dữ liệu cụ thể.

Cú pháp

Hãy xem xét cú pháp cơ bản của câu lệnh SELECT như sau:

SELECT column1, column2, columnN
FROM table_name
WHERE [CONDITION | EXPRESSION];

Có các loại biểu thức PostgreSQL khác nhau, được đề cập bên dưới:

PostgreSQL - Biểu thức Boolean

PostgreSQL Boolean Expressions tìm nạp dữ liệu trên cơ sở đối sánh giá trị đơn lẻ. Sau đây là cú pháp:

SELECT column1, column2, columnN
FROM table_name
WHERE SINGLE VALUE MATCHTING EXPRESSION;

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Đây là ví dụ đơn giản cho thấy cách sử dụng Biểu thức Boolean PostgreSQL -

testdb=# SELECT * FROM COMPANY WHERE SALARY = 10000;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address  | salary
----+-------+-----+----------+--------
  7 | James |  24 | Houston  |  10000
(1 row)

PostgreSQL - Biểu thức số

Các biểu thức này được sử dụng để thực hiện bất kỳ phép toán nào trong bất kỳ truy vấn nào. Sau đây là cú pháp:

SELECT numerical_expression as  OPERATION_NAME
[FROM table_name WHERE CONDITION] ;

Ở đây biểu thức số được sử dụng cho biểu thức toán học hoặc bất kỳ công thức nào. Sau đây là một ví dụ đơn giản cho thấy cách sử dụng Biểu thức số trong SQL:

testdb=# SELECT (15 + 6) AS ADDITION ;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

addition
----------
       21
(1 row)

Có một số hàm tích hợp sẵn như avg (), sum (), count () để thực hiện những gì được gọi là tính toán dữ liệu tổng hợp dựa trên một bảng hoặc một cột bảng cụ thể.

testdb=# SELECT COUNT(*) AS "RECORDS" FROM COMPANY;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

RECORDS
---------
       7
(1 row)

PostgreSQL - Biểu thức ngày

Biểu thức ngày trả về các giá trị ngày và giờ của hệ thống hiện tại và các biểu thức này được sử dụng trong các thao tác dữ liệu khác nhau.

testdb=#  SELECT CURRENT_TIMESTAMP;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

now
-------------------------------
 2013-05-06 14:38:28.078+05:30
(1 row)

Mệnh đề WHERE của PostgreSQL được sử dụng để chỉ định một điều kiện trong khi tìm nạp dữ liệu từ một bảng hoặc kết hợp với nhiều bảng.

Nếu điều kiện đã cho được thỏa mãn, thì chỉ khi đó nó mới trả về giá trị cụ thể từ bảng. Bạn có thể lọc ra các hàng mà bạn không muốn đưa vào tập kết quả bằng cách sử dụng mệnh đề WHERE.

Mệnh đề WHERE không chỉ được sử dụng trong câu lệnh SELECT mà còn được sử dụng trong câu lệnh UPDATE, DELETE, v.v., mà chúng ta sẽ xem xét trong các chương tiếp theo.

Cú pháp

Cú pháp cơ bản của câu lệnh SELECT với mệnh đề WHERE như sau:

SELECT column1, column2, columnN
FROM table_name
WHERE [search_condition]

Bạn có thể chỉ định điều kiện tìm kiếm bằng cách sử dụng các toán tử so sánh hoặc lôgic. like>, <, =, LIKE, NOT, v.v ... Các ví dụ sau sẽ làm rõ khái niệm này.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Dưới đây là các ví dụ đơn giản cho thấy việc sử dụng các toán tử logic PostgreSQL. Câu lệnh SELECT sau đây sẽ liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25AND lương lớn hơn hoặc bằng 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age |  address   | salary
----+-------+-----+------------+--------
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(2 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25 OR lương lớn hơn hoặc bằng 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(4 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi mà AGE không phải là NULL có nghĩa là tất cả các bản ghi, vì không bản ghi nào có AGE bằng NULL -

testdb=#  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
 ----+-------+-----+------------+--------
   1 | Paul  |  32 | California |  20000
   2 | Allen |  25 | Texas      |  15000
   3 | Teddy |  23 | Norway     |  20000
   4 | Mark  |  25 | Rich-Mond  |  65000
   5 | David |  27 | Texas      |  85000
   6 | Kim   |  22 | South-Hall |  45000
   7 | James |  24 | Houston    |  10000
(7 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi mà NAME bắt đầu bằng 'Pa', không quan trọng những gì đến sau 'Pa'.

testdb=# SELECT * FROM COMPANY WHERE NAME LIKE 'Pa%';

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name | age |address    | salary
----+------+-----+-----------+--------
  1 | Paul |  32 | California|  20000

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE là 25 hoặc 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE không phải là 25 hay 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(4 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có giá trị AGE ở GIỮA 25 VÀ 27 -

testdb=# SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(3 rows)

Câu lệnh SELECT sau sử dụng truy vấn con SQL trong đó truy vấn con tìm thấy tất cả các bản ghi có trường AGE có SALARY> 65000 và mệnh đề WHERE mới hơn đang được sử dụng cùng với toán tử EXISTS để liệt kê tất cả các bản ghi có AGE từ truy vấn bên ngoài tồn tại trong kết quả trả về bằng truy vấn phụ -

testdb=# SELECT AGE FROM COMPANY
        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

age
-----
  32
  25
  23
  25
  27
  22
  24
(7 rows)

Câu lệnh SELECT sau sử dụng truy vấn con SQL trong đó truy vấn con tìm thấy tất cả các bản ghi có trường AGE có SALARY> 65000 và mệnh đề WHERE mới hơn đang được sử dụng cùng với toán tử> để liệt kê tất cả các bản ghi mà AGE từ truy vấn bên ngoài lớn hơn tuổi trong kết quả trả về bởi truy vấn phụ -

testdb=# SELECT * FROM COMPANY
        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name | age | address    | salary
----+------+-----+------------+--------
  1 | Paul |  32 | California |  20000

PostgreSQL ANDORtoán tử được sử dụng để kết hợp nhiều điều kiện để thu hẹp dữ liệu đã chọn trong một câu lệnh PostgreSQL. Hai toán tử này được gọi là toán tử liên hợp.

Các toán tử này cung cấp một phương tiện để thực hiện nhiều phép so sánh với các toán tử khác nhau trong cùng một câu lệnh PostgreSQL.

Toán tử AND

Các ANDtoán tử cho phép tồn tại nhiều điều kiện trong mệnh đề WHERE của câu lệnh PostgreSQL. Trong khi sử dụng toán tử AND, điều kiện hoàn thành sẽ được giả định đúng khi tất cả các điều kiện đều đúng. Ví dụ [condition1] AND [condition2] sẽ chỉ đúng khi cả condition1 và condition2 đều đúng.

Cú pháp

Cú pháp cơ bản của toán tử AND với mệnh đề WHERE như sau:

SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] AND [condition2]...AND [conditionN];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND. Đối với một hành động được thực hiện bởi câu lệnh PostgreSQL, cho dù đó là một giao dịch hay truy vấn, tất cả các điều kiện được phân tách bởi AND phải là TRUE.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25 AND lương lớn hơn hoặc bằng 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(2 rows)

Toán tử HOẶC

Toán tử OR cũng được sử dụng để kết hợp nhiều điều kiện trong mệnh đề WHERE của câu lệnh PostgreSQL. Trong khi sử dụng toán tử OR, điều kiện hoàn thành sẽ được giả định đúng khi ít nhất bất kỳ điều kiện nào là đúng. Ví dụ [condition1] OR [condition2] sẽ đúng nếu điều kiện1 hoặc điều kiện2 là đúng.

Cú pháp

Cú pháp cơ bản của toán tử OR với mệnh đề WHERE như sau:

SELECT column1, column2, columnN
FROM table_name
WHERE [condition1] OR [condition2]...OR [conditionN]

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử OR. Đối với một hành động được thực hiện bởi câu lệnh PostgreSQL, cho dù đó là một giao dịch hay truy vấn, chỉ bất kỳ MỘT trong các điều kiện được phân tách bởi OR phải là TRUE.

Thí dụ

Hãy xem xét bảng COMPANY , có các bản ghi sau:

# select * from COMPANY;
  id | name  | age | address   | salary
 ----+-------+-----+-----------+--------
   1 | Paul  |  32 | California|  20000
   2 | Allen |  25 | Texas     |  15000
   3 | Teddy |  23 | Norway    |  20000
   4 | Mark  |  25 | Rich-Mond |  65000
   5 | David |  27 | Texas     |  85000
   6 | Kim   |  22 | South-Hall|  45000
   7 | James |  24 | Houston   |  10000
(7 rows)

Câu lệnh SELECT sau đây liệt kê tất cả các bản ghi có AGE lớn hơn hoặc bằng 25 OR lương lớn hơn hoặc bằng 65000,00 -

testdb=# SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(4 rows)

PostgreSQL UPDATETruy vấn được sử dụng để sửa đổi các bản ghi hiện có trong bảng. Bạn có thể sử dụng mệnh đề WHERE với truy vấn UPDATE để cập nhật các hàng đã chọn. Nếu không, tất cả các hàng sẽ được cập nhật.

Cú pháp

Cú pháp cơ bản của truy vấn UPDATE với mệnh đề WHERE như sau:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR.

Thí dụ

Hãy xem xét bảng COMPANY , có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ cập nhật ADDRESS cho một khách hàng có ID là 6 -

testdb=# UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;

Bây giờ, bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
  3 | Teddy |  23 | Norway     |  15000
(7 rows)

Nếu bạn muốn sửa đổi tất cả các giá trị cột ĐỊA CHỈ và LƯƠNG trong bảng CÔNG TY, bạn không cần sử dụng mệnh đề WHERE và truy vấn CẬP NHẬT sẽ như sau:

testdb=# UPDATE COMPANY SET ADDRESS = 'Texas', SALARY=20000;

Bây giờ, bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address | salary
----+-------+-----+---------+--------
  1 | Paul  |  32 | Texas   |  20000
  2 | Allen |  25 | Texas   |  20000
  4 | Mark  |  25 | Texas   |  20000
  5 | David |  27 | Texas   |  20000
  6 | Kim   |  22 | Texas   |  20000
  7 | James |  24 | Texas   |  20000
  3 | Teddy |  23 | Texas   |  20000
(7 rows)

PostgreSQL DELETETruy vấn được sử dụng để xóa các bản ghi hiện có khỏi bảng. Bạn có thể sử dụng mệnh đề WHERE với truy vấn DELETE để xóa các hàng đã chọn. Nếu không, tất cả các bản ghi sẽ bị xóa.

Cú pháp

Cú pháp cơ bản của truy vấn DELETE với mệnh đề WHERE như sau:

DELETE FROM table_name
WHERE [condition];

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR.

Thí dụ

Hãy xem xét bảng COMPANY , có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ XÓA khách hàng có ID là 7 -

testdb=# DELETE FROM COMPANY WHERE ID = 2;

Bây giờ, bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
  6 | Kim   |  22 | South-Hall  |  45000
  7 | James |  24 | Houston     |  10000
(6 rows)

Nếu bạn muốn XÓA tất cả các bản ghi khỏi bảng CÔNG TY, bạn không cần sử dụng mệnh đề WHERE với các truy vấn XÓA, điều này sẽ như sau:

testdb=# DELETE FROM COMPANY;

Bây giờ, bảng COMPANY không có bất kỳ bản ghi nào vì tất cả các bản ghi đã bị xóa bởi câu lệnh DELETE.

PostgreSQL LIKEtoán tử được sử dụng để so khớp các giá trị văn bản với một mẫu bằng cách sử dụng ký tự đại diện. Nếu biểu thức tìm kiếm có thể được so khớp với biểu thức mẫu, toán tử LIKE sẽ trả về true, đó là1.

Có hai ký tự đại diện được sử dụng cùng với toán tử LIKE -

  • Dấu phần trăm (%)
  • Dấu gạch dưới (_)

Dấu phần trăm đại diện cho không, một hoặc nhiều số hoặc ký tự. Dấu gạch dưới thể hiện một số hoặc một ký tự. Các ký hiệu này có thể được sử dụng trong các tổ hợp.

Nếu một trong hai dấu hiệu này không được sử dụng cùng với mệnh đề LIKE, thì LIKE hoạt động giống như toán tử bằng.

Cú pháp

Cú pháp cơ bản của% và _ như sau:

SELECT FROM table_name
WHERE column LIKE 'XXXX%'

or

SELECT FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT FROM table_name
WHERE column LIKE '_XXXX_'

Bạn có thể kết hợp N số điều kiện bằng cách sử dụng toán tử AND hoặc OR. Ở đây XXXX có thể là bất kỳ giá trị số hoặc chuỗi nào.

Thí dụ

Dưới đây là một số ví dụ cho thấy phần WHERE có mệnh đề LIKE khác nhau với các toán tử '%' và '_' -

S. Không. Tuyên bố & Mô tả
1

WHERE SALARY::text LIKE '200%'

Tìm bất kỳ giá trị nào bắt đầu bằng 200

2

WHERE SALARY::text LIKE '%200%'

Tìm bất kỳ giá trị nào có 200 ở bất kỳ vị trí nào

3

WHERE SALARY::text LIKE '_00%'

Tìm bất kỳ giá trị nào có 00 ở vị trí thứ hai và thứ ba

4

WHERE SALARY::text LIKE '2_%_%'

Tìm bất kỳ giá trị nào bắt đầu bằng 2 và có độ dài ít nhất 3 ký tự

5

WHERE SALARY::text LIKE '%2'

Tìm bất kỳ giá trị nào kết thúc bằng 2

6

WHERE SALARY::text LIKE '_2%3'

Tìm bất kỳ giá trị nào có 2 ở vị trí thứ hai và kết thúc bằng 3

7

WHERE SALARY::text LIKE '2___3'

Tìm bất kỳ giá trị nào trong một số có năm chữ số bắt đầu bằng 2 và kết thúc bằng 3

Postgres LIKE chỉ là so sánh chuỗi. Do đó, chúng ta cần chuyển cột số nguyên thành chuỗi một cách rõ ràng như trong các ví dụ trên.

Chúng ta hãy lấy một ví dụ thực tế, xem xét bảng COMPANY , có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ hiển thị tất cả các bản ghi từ bảng COMPANY trong đó AGE bắt đầu bằng 2 -

testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  2 | Allen |  25 | Texas       |  15000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
  6 | Kim   |  22 | South-Hall  |  45000
  7 | James |  24 | Houston     |  10000
  8 | Paul  |  24 | Houston     |  20000
(7 rows)

Sau đây là một ví dụ, sẽ hiển thị tất cả các bản ghi từ bảng COMPANY trong đó ADDRESS sẽ có dấu gạch ngang (-) bên trong văn bản -

testdb=# SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

Điều này sẽ tạo ra kết quả sau:

id | name | age |                      address              | salary
----+------+-----+-------------------------------------------+--------
  4 | Mark |  25 | Rich-Mond                                 |  65000
  6 | Kim  |  22 | South-Hall                                |  45000
(2 rows)

PostgreSQL LIMIT mệnh đề được sử dụng để giới hạn lượng dữ liệu được trả về bởi câu lệnh SELECT.

Cú pháp

Cú pháp cơ bản của câu lệnh SELECT với mệnh đề LIMIT như sau:

SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows]

Sau đây là cú pháp của mệnh đề LIMIT khi nó được sử dụng cùng với mệnh đề OFFSET:

SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows] OFFSET [row num]

LIMIT và OFFSET cho phép bạn truy xuất chỉ một phần của các hàng được tạo bởi phần còn lại của truy vấn.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, giới hạn hàng trong bảng theo số hàng bạn muốn lấy từ bảng -

testdb=# SELECT * FROM COMPANY LIMIT 4;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
(4 rows)

Tuy nhiên, trong một số tình huống nhất định, bạn có thể cần chọn một tập hợp các bản ghi từ một điểm bù cụ thể. Đây là một ví dụ, chọn ba bản ghi bắt đầu từ vị trí thứ ba -

testdb=# SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
(3 rows)

PostgreSQL ORDER BY mệnh đề được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, dựa trên một hoặc nhiều cột.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY như sau:

SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Bạn có thể sử dụng nhiều cột trong mệnh đề ORDER BY. Đảm bảo rằng bất kỳ cột nào bạn đang sử dụng để sắp xếp, cột đó sẽ có sẵn trong danh sách cột.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ sắp xếp kết quả theo thứ tự tăng dần theo LƯƠNG -

testdb=# SELECT * FROM COMPANY ORDER BY AGE ASC;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
 ----+-------+-----+------------+--------
   6 | Kim   |  22 | South-Hall |  45000
   3 | Teddy |  23 | Norway     |  20000
   7 | James |  24 | Houston    |  10000
   8 | Paul  |  24 | Houston    |  20000
   4 | Mark  |  25 | Rich-Mond  |  65000
   2 | Allen |  25 | Texas      |  15000
   5 | David |  27 | Texas      |  85000
   1 | Paul  |  32 | California |  20000
   9 | James |  44 | Norway     |   5000
  10 | James |  45 | Texas      |   5000
(10 rows)

Sau đây là một ví dụ, sẽ sắp xếp kết quả theo thứ tự tăng dần theo TÊN và LƯƠNG -

testdb=# SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address      | salary
----+-------+-----+--------------+--------
  2 | Allen |  25 | Texas        |  15000
  5 | David |  27 | Texas        |  85000
 10 | James |  45 | Texas        |   5000
  9 | James |  44 | Norway       |   5000
  7 | James |  24 | Houston      |  10000
  6 | Kim   |  22 | South-Hall   |  45000
  4 | Mark  |  25 | Rich-Mond    |  65000
  1 | Paul  |  32 | California   |  20000
  8 | Paul  |  24 | Houston      |  20000
  3 | Teddy |  23 | Norway       |  20000
(10 rows)

Sau đây là một ví dụ, sẽ sắp xếp kết quả theo thứ tự giảm dần theo NAME -

testdb=# SELECT * FROM COMPANY ORDER BY NAME DESC;

Điều này sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  3 | Teddy |  23 | Norway     |  20000
  1 | Paul  |  32 | California |  20000
  8 | Paul  |  24 | Houston    |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
  9 | James |  44 | Norway     |   5000
 10 | James |  45 | Texas      |   5000
  5 | David |  27 | Texas      |  85000
  2 | Allen |  25 | Texas      |  15000
(10 rows)

PostgreSQL GROUP BYmệnh đề được sử dụng phối hợp với câu lệnh SELECT để nhóm các hàng đó lại với nhau trong một bảng có dữ liệu giống hệt nhau. Điều này được thực hiện để loại bỏ dư thừa trong đầu ra và / hoặc tính toán các tổng hợp áp dụng cho các nhóm này.

Mệnh đề GROUP BY theo sau mệnh đề WHERE trong câu lệnh SELECT và đứng trước mệnh đề ORDER BY.

Cú pháp

Cú pháp cơ bản của mệnh đề GROUP BY được đưa ra dưới đây. Mệnh đề GROUP BY phải tuân theo các điều kiện trong mệnh đề WHERE và phải đứng trước mệnh đề ORDER BY nếu được sử dụng.

SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề GROUP BY. Đảm bảo rằng bất kỳ cột nào bạn đang sử dụng để nhóm, cột đó sẽ có sẵn trong danh sách cột.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Nếu bạn muốn biết tổng số tiền lương của từng khách hàng, thì truy vấn GROUP BY sẽ như sau:

testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;

Điều này sẽ tạo ra kết quả sau:

name  |  sum
 -------+-------
  Teddy | 20000
  Paul  | 20000
  Mark  | 65000
  David | 85000
  Allen | 15000
  Kim   | 45000
  James | 10000
(7 rows)

Bây giờ, chúng ta hãy tạo thêm ba bản ghi trong bảng COMPANY bằng cách sử dụng các câu lệnh INSERT sau:

INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);

Bây giờ, bảng của chúng tôi có các bản ghi sau với tên trùng lặp:

id | name  | age | address      | salary
 ----+-------+-----+--------------+--------
   1 | Paul  |  32 | California   |  20000
   2 | Allen |  25 | Texas        |  15000
   3 | Teddy |  23 | Norway       |  20000
   4 | Mark  |  25 | Rich-Mond    |  65000
   5 | David |  27 | Texas        |  85000
   6 | Kim   |  22 | South-Hall   |  45000
   7 | James |  24 | Houston      |  10000
   8 | Paul  |  24 | Houston      |  20000
   9 | James |  44 | Norway       |   5000
  10 | James |  45 | Texas        |   5000
(10 rows)

Một lần nữa, chúng ta hãy sử dụng cùng một câu lệnh để nhóm theo tất cả các bản ghi bằng cột NAME như sau:

testdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

Điều này sẽ tạo ra kết quả sau:

name  |  sum
-------+-------
 Allen | 15000
 David | 85000
 James | 20000
 Kim   | 45000
 Mark  | 65000
 Paul  | 40000
 Teddy | 20000
(7 rows)

Hãy để chúng tôi sử dụng mệnh đề ORDER BY cùng với mệnh đề GROUP BY như sau:

testdb=#  SELECT NAME, SUM(SALARY)
         FROM COMPANY GROUP BY NAME ORDER BY NAME DESC;

Điều này sẽ tạo ra kết quả sau:

name  |  sum
-------+-------
 Teddy | 20000
 Paul  | 40000
 Mark  | 65000
 Kim   | 45000
 James | 20000
 David | 85000
 Allen | 15000
(7 rows)

Trong PostgreSQL, truy vấn WITH cung cấp một cách để viết các câu lệnh bổ trợ để sử dụng trong một truy vấn lớn hơn. Nó giúp chia nhỏ các truy vấn phức tạp và lớn thành các biểu mẫu đơn giản hơn, dễ đọc. Các câu lệnh này thường được gọi là Biểu thức Bảng chung hoặc CTE, có thể được coi là xác định các bảng tạm thời chỉ tồn tại cho một truy vấn.

Truy vấn WITH là truy vấn CTE, đặc biệt hữu ích khi truy vấn con được thực thi nhiều lần. Nó cũng hữu ích không kém thay cho các bảng tạm thời. Nó tính tổng hợp một lần và cho phép chúng tôi tham chiếu nó bằng tên của nó (có thể nhiều lần) trong các truy vấn.

Mệnh đề WITH phải được xác định trước khi nó được sử dụng trong truy vấn.

Cú pháp

Cú pháp cơ bản của truy vấn WITH như sau:

WITH
   name_for_summary_data AS (
      SELECT Statement)
   SELECT columns
   FROM name_for_summary_data
   WHERE conditions <=> (
      SELECT column
      FROM name_for_summary_data)
   [ORDER BY columns]

Trong đó name_for_summary_data là tên được đặt cho mệnh đề WITH. Tên_for_summary_data có thể giống với tên bảng hiện có và sẽ được ưu tiên hơn.

Bạn có thể sử dụng các câu lệnh sửa đổi dữ liệu (INSERT, UPDATE hoặc DELETE) trong WITH. Điều này cho phép bạn thực hiện một số thao tác khác nhau trong cùng một truy vấn.

Đệ quy VỚI

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Bây giờ, chúng ta hãy viết một truy vấn bằng mệnh đề WITH để chọn các bản ghi từ bảng trên, như sau:

With CTE AS
(Select
 ID
, NAME
, AGE
, ADDRESS
, SALARY
FROM COMPANY )
Select * From CTE;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Bây giờ, chúng ta hãy viết một truy vấn bằng cách sử dụng từ khóa RECURSIVE cùng với mệnh đề WITH, để tìm tổng số tiền lương nhỏ hơn 20000, như sau:

WITH RECURSIVE t(n) AS (
   VALUES (0)
   UNION ALL
   SELECT SALARY FROM COMPANY WHERE SALARY < 20000
)
SELECT sum(n) FROM t;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

sum
-------
 25000
(1 row)

Hãy để chúng tôi viết một truy vấn bằng cách sử dụng các câu lệnh sửa đổi dữ liệu cùng với mệnh đề WITH, như hình dưới đây.

Đầu tiên, tạo một bảng COMPANY1 tương tự như bảng COMPANY. Truy vấn trong ví dụ này chuyển các hàng từ COMPANY sang COMPANY1 một cách hiệu quả. DELETE in WITH xóa các hàng được chỉ định khỏi COMPANY, trả lại nội dung của chúng bằng mệnh đề RETURNING của nó; và sau đó truy vấn chính đọc đầu ra đó và chèn nó vào BẢNG CÔNG TY1 -

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

WITH moved_rows AS (
   DELETE FROM COMPANY
   WHERE
      SALARY >= 30000
   RETURNING *
)
INSERT INTO COMPANY1 (SELECT * FROM moved_rows);

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

INSERT 0 3

Bây giờ, các bản ghi trong bảng COMPANY và COMPANY1 như sau:

testdb=# SELECT * FROM COMPANY;
 id | name  | age |  address   | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  7 | James |  24 | Houston    |  10000
(4 rows)


testdb=# SELECT * FROM COMPANY1;
 id | name  | age | address | salary
----+-------+-----+-------------+--------
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
  6 | Kim   |  22 | South-Hall  |  45000
(3 rows)

Mệnh đề HAVING cho phép chúng ta chọn ra các hàng cụ thể mà kết quả của hàm đáp ứng một số điều kiện.

Mệnh đề WHERE đặt điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đặt điều kiện cho các nhóm được tạo bởi mệnh đề GROUP BY.

Cú pháp

Sau đây là vị trí của mệnh đề HAVING trong truy vấn SELECT:

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

Mệnh đề HAVING phải theo sau mệnh đề GROUP BY trong một truy vấn và cũng phải đứng trước mệnh đề ORDER BY nếu được sử dụng. Sau đây là cú pháp của câu lệnh SELECT, bao gồm mệnh đề HAVING -

SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Sau đây là một ví dụ, sẽ hiển thị bản ghi mà số tên nhỏ hơn 2 -

testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;

Điều này sẽ tạo ra kết quả sau:

name
 -------
  Teddy
  Paul
  Mark
  David
  Allen
  Kim
  James
(7 rows)

Bây giờ, chúng ta hãy tạo thêm ba bản ghi trong bảng COMPANY bằng cách sử dụng các câu lệnh INSERT sau:

INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00);
INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00);
INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00);

Bây giờ, bảng của chúng tôi có các bản ghi sau với tên trùng lặp:

id | name  | age | address      | salary
 ----+-------+-----+--------------+--------
   1 | Paul  |  32 | California   |  20000
   2 | Allen |  25 | Texas        |  15000
   3 | Teddy |  23 | Norway       |  20000
   4 | Mark  |  25 | Rich-Mond    |  65000
   5 | David |  27 | Texas        |  85000
   6 | Kim   |  22 | South-Hall   |  45000
   7 | James |  24 | Houston      |  10000
   8 | Paul  |  24 | Houston      |  20000
   9 | James |  44 | Norway       |   5000
  10 | James |  45 | Texas        |   5000
(10 rows)

Sau đây là ví dụ, sẽ hiển thị bản ghi mà số lượng tên lớn hơn 1 -

testdb-# SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) > 1;

Điều này sẽ tạo ra kết quả sau:

name
-------
 Paul
 James
(2 rows)

PostgreSQL DISTINCT từ khóa được sử dụng cùng với câu lệnh SELECT để loại bỏ tất cả các bản ghi trùng lặp và chỉ tìm nạp các bản ghi duy nhất.

Có thể có một tình huống khi bạn có nhiều bản ghi trùng lặp trong một bảng. Trong khi tìm nạp các bản ghi như vậy, sẽ hợp lý hơn nếu chỉ tìm nạp các bản ghi duy nhất thay vì tìm nạp các bản ghi trùng lặp.

Cú pháp

Cú pháp cơ bản của từ khóa DISTINCT để loại bỏ các bản ghi trùng lặp như sau:

SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Hãy để chúng tôi thêm hai bản ghi nữa vào bảng này như sau:

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (8, 'Paul', 32, 'California', 20000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (9, 'Allen', 25, 'Texas', 15000.00 );

Bây giờ, các bản ghi trong bảng COMPANY sẽ là -

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
  8 | Paul  |  32 | California |  20000
  9 | Allen |  25 | Texas      |  15000
(9 rows)

Trước tiên, chúng ta hãy xem cách truy vấn SELECT sau trả về các bản ghi lương trùng lặp:

testdb=# SELECT name FROM COMPANY;

Điều này sẽ tạo ra kết quả sau:

name
-------
 Paul
 Allen
 Teddy
 Mark
 David
 Kim
 James
 Paul
 Allen
(9 rows)

Bây giờ, hãy để chúng tôi sử dụng DISTINCT từ khóa với truy vấn SELECT ở trên và xem kết quả:

testdb=# SELECT DISTINCT name FROM COMPANY;

Điều này sẽ tạo ra kết quả sau mà chúng tôi không có bất kỳ mục nhập trùng lặp nào -

name
-------
 Teddy
 Paul
 Mark
 David
 Allen
 Kim
 James
(7 rows)

Ràng buộc là các quy tắc được thực thi trên các cột dữ liệu trên bảng. Chúng được sử dụng để ngăn dữ liệu không hợp lệ được nhập vào cơ sở dữ liệu. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong cơ sở dữ liệu.

Các ràng buộc có thể là cấp cột hoặc cấp bảng. Các ràng buộc mức cột chỉ được áp dụng cho một cột trong khi các ràng buộc mức bảng được áp dụng cho toàn bộ bảng. Việc xác định kiểu dữ liệu cho một cột tự nó là một ràng buộc. Ví dụ, một cột kiểu DATE ràng buộc cột đó thành những ngày hợp lệ.

Sau đây là các ràng buộc thường được sử dụng có sẵn trong PostgreSQL.

  • NOT NULL Constraint - Đảm bảo rằng một cột không thể có giá trị NULL.

  • UNIQUE Constraint - Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.

  • PRIMARY Key - Nhận dạng duy nhất từng hàng / bản ghi trong bảng cơ sở dữ liệu.

  • FOREIGN Key - Ràng buộc dữ liệu dựa trên các cột trong các bảng khác.

  • CHECK Constraint - Ràng buộc CHECK đảm bảo rằng tất cả các giá trị trong một cột thỏa mãn các điều kiện nhất định.

  • EXCLUSION Constraint - Ràng buộc EXCLUDE đảm bảo rằng nếu hai hàng bất kỳ được so sánh trên (các) cột hoặc (các) biểu thức được chỉ định bằng cách sử dụng (các) toán tử được chỉ định, thì không phải tất cả các so sánh này đều trả về TRUE.

Ràng buộc KHÔNG ĐẦY ĐỦ

Theo mặc định, một cột có thể chứa giá trị NULL. Nếu bạn không muốn một cột có giá trị NULL, thì bạn cần xác định ràng buộc như vậy trên cột này, xác định rằng NULL bây giờ không được phép cho cột đó. Ràng buộc NOT NULL luôn được viết dưới dạng ràng buộc cột.

NULL không giống như không có dữ liệu; đúng hơn, nó đại diện cho dữ liệu không xác định.

Thí dụ

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên COMPANY1 và thêm năm cột, ba trong số đó, ID và NAME và AGE, chỉ định không chấp nhận giá trị NULL -

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Hạn chế duy nhất

Ràng buộc DUY NHẤT ngăn hai bản ghi có các giá trị giống nhau trong một cột cụ thể. Ví dụ: trong bảng COMPANY, bạn có thể muốn ngăn hai hoặc nhiều người có cùng độ tuổi.

Thí dụ

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên COMPANY3 và thêm năm cột. Ở đây, cột TUỔI được đặt thành DUY NHẤT, do đó bạn không thể có hai bản ghi có cùng độ tuổi -

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

Ràng buộc CHÍNH CHÍNH

Ràng buộc PRIMARY KEY xác định duy nhất từng bản ghi trong bảng cơ sở dữ liệu. Có thể có nhiều cột DUY NHẤT, nhưng chỉ có một khóa chính trong bảng. Khóa chính rất quan trọng khi thiết kế bảng cơ sở dữ liệu. Khóa chính là id duy nhất.

Chúng tôi sử dụng chúng để tham chiếu đến các hàng trong bảng. Khóa chính trở thành khóa ngoại trong các bảng khác, khi tạo quan hệ giữa các bảng. Do 'giám sát mã hóa lâu đời', khóa chính có thể là NULL trong SQLite. Đây không phải là trường hợp của các cơ sở dữ liệu khác

Khóa chính là một trường trong bảng, xác định duy nhất mỗi hàng / bản ghi trong bảng cơ sở dữ liệu. Khóa chính phải chứa các giá trị duy nhất. Một cột khóa chính không được có giá trị NULL.

Một bảng chỉ có thể có một khóa chính, có thể bao gồm một hoặc nhiều trường. Khi nhiều trường được sử dụng làm khóa chính, chúng được gọi làcomposite key.

Nếu một bảng có khóa chính được xác định trên (các) trường bất kỳ, thì bạn không thể có hai bản ghi có cùng giá trị của (các) trường đó.

Thí dụ

Bạn đã thấy nhiều ví dụ khác nhau ở trên, nơi chúng tôi đã tạo bảng COMAPNY4 với ID là khóa chính -

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Ràng buộc NGOẠI KHÓA

Ràng buộc khóa ngoại chỉ định rằng các giá trị trong một cột (hoặc một nhóm cột) phải khớp với các giá trị xuất hiện trong một số hàng của bảng khác. Chúng tôi nói rằng điều này duy trì tính toàn vẹn tham chiếu giữa hai bảng có liên quan. Chúng được gọi là khóa ngoại vì các ràng buộc là ngoại; nghĩa là, bên ngoài bảng. Khóa ngoại đôi khi được gọi là khóa tham chiếu.

Thí dụ

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên COMPANY5 và thêm năm cột.

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên là DEPARTMENT1, bảng này thêm ba cột. Cột EMP_ID là khóa ngoại và tham chiếu đến trường ID của bảng COMPANY6.

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

Ràng buộc KIỂM TRA

Ràng buộc CHECK cho phép một điều kiện để kiểm tra giá trị đang được nhập vào bản ghi. Nếu điều kiện đánh giá là false, bản ghi vi phạm ràng buộc và không được nhập vào bảng.

Thí dụ

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên COMPANY5 và thêm năm cột. Ở đây, chúng tôi thêm cột KIỂM TRA với LƯƠNG, do đó bạn không thể có bất kỳ LƯƠNG nào là 0.

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

Ràng buộc LOẠI TRỪ

Các ràng buộc loại trừ đảm bảo rằng nếu hai hàng bất kỳ được so sánh trên các cột hoặc biểu thức được chỉ định bằng cách sử dụng các toán tử được chỉ định, thì ít nhất một trong các so sánh toán tử này sẽ trả về false hoặc null.

Thí dụ

Ví dụ: câu lệnh PostgreSQL sau đây tạo một bảng mới có tên COMPANY7 và thêm năm cột. Ở đây, chúng tôi thêm một ràng buộc EXCLUDE -

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,
   AGE WITH <>)
);

Ở đây, USING gist là loại chỉ mục để xây dựng và sử dụng để thực thi.

Bạn cần thực hiện lệnh CREATE EXTENSION btree_gist , một lần cho mỗi cơ sở dữ liệu. Thao tác này sẽ cài đặt phần mở rộng btree_gist, phần mở rộng này xác định các ràng buộc loại trừ trên các kiểu dữ liệu vô hướng đơn giản.

Vì chúng tôi đã thực thi tuổi phải giống nhau, chúng ta hãy xem điều này bằng cách chèn các bản ghi vào bảng -

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );

Đối với hai câu lệnh INSERT đầu tiên, các bản ghi được thêm vào bảng COMPANY7. Đối với câu lệnh INSERT thứ ba, lỗi sau được hiển thị:

ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).

Ràng buộc bỏ qua

Để loại bỏ một ràng buộc, bạn cần biết tên của nó. Nếu biết tên thì rất dễ rớt. Ngoài ra, bạn cần tìm ra tên do hệ thống tạo. Lệnh psql \ d tên bảng có thể hữu ích ở đây. Cú pháp chung là -

ALTER TABLE table_name DROP CONSTRAINT some_name;

PostgreSQL Joinsmệnh đề được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong cơ sở dữ liệu. JOIN là một phương tiện để kết hợp các trường từ hai bảng bằng cách sử dụng các giá trị chung cho mỗi bảng.

Các loại tham gia trong PostgreSQL là -

  • THAM GIA CROSS
  • THAM GIA INNER
  • THAM GIA BÊN NGOÀI TRÁI
  • THAM GIA ĐÚNG NGƯỜI RA NGOÀI
  • THAM GIA NGOÀI TRỜI ĐẦY ĐỦ

Trước khi tiếp tục, chúng ta hãy xem xét hai bảng, CÔNG TY và BỘ PHẬN. Chúng ta đã thấy các câu lệnh INSERT để điền vào bảng COMPANY. Vì vậy, hãy để chúng tôi giả sử danh sách các bản ghi có sẵn trong bảng COMPANY -

id | name  | age | address   | salary | join_date
----+-------+-----+-----------+--------+-----------
  1 | Paul  |  32 | California|  20000 | 2001-07-13
  3 | Teddy |  23 | Norway    |  20000 |
  4 | Mark  |  25 | Rich-Mond |  65000 | 2007-12-13
  5 | David |  27 | Texas     |  85000 | 2007-12-13
  2 | Allen |  25 | Texas     |        | 2007-12-13
  8 | Paul  |  24 | Houston   |  20000 | 2005-07-13
  9 | James |  44 | Norway    |   5000 | 2005-07-13
 10 | James |  45 | Texas     |   5000 | 2005-07-13

Một bảng khác là DEPARTMENT, có định nghĩa sau:

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

Đây là danh sách các câu lệnh INSERT để điền vào bảng DEPARTMENT -

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

Cuối cùng, chúng tôi có danh sách các bản ghi sau có sẵn trong bảng DEPARTMENT -

id | dept        | emp_id
----+-------------+--------
  1 | IT Billing  |  1
  2 | Engineering |  2
  3 | Finance     |  7

THAM GIA CROSS

CROSS JOIN khớp mọi hàng của bảng đầu tiên với mọi hàng của bảng thứ hai. Nếu bảng đầu vào có các cột x và y tương ứng thì bảng kết quả sẽ có các cột x + y. Vì các CROSS JOIN có khả năng tạo ra các bảng cực kỳ lớn, nên phải cẩn thận để chỉ sử dụng chúng khi thích hợp.

Sau đây là cú pháp của CROSS JOIN:

SELECT ... FROM table1 CROSS JOIN table2 ...

Dựa trên các bảng trên, chúng ta có thể viết CROSS JOIN như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

Truy vấn đã cho ở trên sẽ tạo ra kết quả sau:

emp_id| name  |  dept
------|-------|--------------
    1 | Paul  | IT Billing
    1 | Teddy | IT Billing
    1 | Mark  | IT Billing
    1 | David | IT Billing
    1 | Allen | IT Billing
    1 | Paul  | IT Billing
    1 | James | IT Billing
    1 | James | IT Billing
    2 | Paul  | Engineering
    2 | Teddy | Engineering
    2 | Mark  | Engineering
    2 | David | Engineering
    2 | Allen | Engineering
    2 | Paul  | Engineering
    2 | James | Engineering
    2 | James | Engineering
    7 | Paul  | Finance
    7 | Teddy | Finance
    7 | Mark  | Finance
    7 | David | Finance
    7 | Allen | Finance
    7 | Paul  | Finance
    7 | James | Finance
    7 | James | Finance

THAM GIA INNER

INNER JOIN tạo một bảng kết quả mới bằng cách kết hợp các giá trị cột của hai bảng (table1 và table2) dựa trên vị từ nối. Truy vấn so sánh từng hàng của bảng1 với từng hàng của bảng2 để tìm tất cả các cặp hàng thỏa mãn vị từ nối. Khi vị từ nối được thỏa mãn, các giá trị cột cho mỗi cặp hàng đã so khớp của bảng1 và bảng2 được kết hợp thành một hàng kết quả.

INNER JOIN là kiểu nối phổ biến nhất và là kiểu nối mặc định. Bạn có thể sử dụng từ khóa INNER tùy ý.

Sau đây là cú pháp của INNER JOIN:

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_filed = table2.common_field;

Dựa trên các bảng trên, chúng ta có thể viết INNER JOIN như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

Truy vấn đã cho ở trên sẽ tạo ra kết quả sau:

emp_id | name  | dept
--------+-------+------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering

THAM GIA BÊN NGOÀI TRÁI

OUTER JOIN là một phần mở rộng của INNER JOIN. Chuẩn SQL định nghĩa ba loại THAM GIA NGOÀI TRỜI: LEFT, RIGHT, FULL và PostgreSQL hỗ trợ tất cả những điều này.

Trong trường hợp LEFT OUTER JOIN, một phép nối bên trong được thực hiện trước. Sau đó, đối với mỗi hàng trong bảng T1 không thỏa mãn điều kiện nối với bất kỳ hàng nào trong bảng T2, một hàng đã nối sẽ được thêm vào với các giá trị rỗng trong các cột của T2. Do đó, bảng đã nối luôn có ít nhất một hàng cho mỗi hàng trong T1.

Sau đây là cú pháp của LEFT OUTER JOIN -

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

Dựa trên các bảng trên, chúng ta có thể viết một phép nối bên trong như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

Truy vấn đã cho ở trên sẽ tạo ra kết quả sau:

emp_id | name  | dept
--------+-------+------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
        | James |
        | David |
        | Paul  |
        | Mark  |
        | Teddy |
        | James |

THAM GIA ĐÚNG NGƯỜI RA NGOÀI

Đầu tiên, một phép nối bên trong được thực hiện. Sau đó, đối với mỗi hàng trong bảng T2 không thỏa mãn điều kiện nối với bất kỳ hàng nào trong bảng T1, một hàng đã nối sẽ được thêm vào với các giá trị rỗng trong các cột của T1. Đây là câu chuyện của một phép nối bên trái; bảng kết quả sẽ luôn có một hàng cho mỗi hàng trong T2.

Sau đây là cú pháp của RIGHT OUTER JOIN -

SELECT ... FROM table1 RIGHT OUTER JOIN table2 ON conditional_expression ...

Dựa trên các bảng trên, chúng ta có thể viết một phép nối bên trong như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY RIGHT OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

Truy vấn đã cho ở trên sẽ tạo ra kết quả sau:

emp_id | name  | dept
--------+-------+--------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 |       | Finance

THAM GIA NGOÀI TRỜI ĐẦY ĐỦ

Đầu tiên, một phép nối bên trong được thực hiện. Sau đó, đối với mỗi hàng trong bảng T1 không thỏa mãn điều kiện nối với bất kỳ hàng nào trong bảng T2, một hàng đã nối sẽ được thêm vào với các giá trị rỗng trong các cột của T2. Ngoài ra, đối với mỗi hàng của T2 không thỏa mãn điều kiện nối với bất kỳ hàng nào trong T1, một hàng đã nối có giá trị rỗng trong các cột của T1 sẽ được thêm vào.

Sau đây là cú pháp của FULL OUTER JOIN -

SELECT ... FROM table1 FULL OUTER JOIN table2 ON conditional_expression ...

Dựa trên các bảng trên, chúng ta có thể viết một phép nối bên trong như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY FULL OUTER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID;

Truy vấn đã cho ở trên sẽ tạo ra kết quả sau:

emp_id | name  | dept
--------+-------+---------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 |       | Finance
        | James |
        | David |
        | Paul  |
        | Mark  |
        | Teddy |
        | James |

PostgreSQL UNION mệnh đề / toán tử được sử dụng để kết hợp các kết quả của hai hoặc nhiều câu lệnh SELECT mà không trả về bất kỳ hàng trùng lặp nào.

Để sử dụng UNION, mỗi SELECT phải có cùng số cột được chọn, cùng số biểu thức cột, cùng kiểu dữ liệu và có cùng thứ tự nhưng chúng không nhất thiết phải có cùng độ dài.

Cú pháp

Cú pháp cơ bản của UNION như sau -

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Ở đây, điều kiện nhất định có thể là bất kỳ biểu thức nhất định nào dựa trên yêu cầu của bạn.

Thí dụ

Hãy xem xét hai bảng sau, (a) bảng COMPANY như sau:

testdb=# SELECT * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

(b) Một bảng khác là DEPARTMENT như sau:

testdb=# SELECT * from DEPARTMENT;
 id | dept        | emp_id
----+-------------+--------
  1 | IT Billing  |      1
  2 | Engineering |      2
  3 | Finance     |      7
  4 | Engineering |      3
  5 | Finance     |      4
  6 | Engineering |      5
  7 | Finance     |      6
(7 rows)

Bây giờ chúng ta hãy nối hai bảng này bằng cách sử dụng câu lệnh SELECT cùng với mệnh đề UNION như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION
      SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
         ON COMPANY.ID = DEPARTMENT.EMP_ID;

Điều này sẽ tạo ra kết quả sau:

emp_id | name  |  dept
--------+-------+--------------
      5 | David | Engineering
      6 | Kim   | Finance
      2 | Allen | Engineering
      3 | Teddy | Engineering
      4 | Mark  | Finance
      1 | Paul  | IT Billing
      7 | James | Finance
(7 rows)

Mệnh đề UNION ALL

Toán tử UNION ALL được sử dụng để kết hợp các kết quả của hai câu lệnh SELECT bao gồm các hàng trùng lặp. Các quy tắc tương tự áp dụng cho UNION cũng áp dụng cho nhà điều hành UNION ALL.

Cú pháp

Cú pháp cơ bản của UNION ALL như sau -

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

Ở đây, điều kiện nhất định có thể là bất kỳ biểu thức nhất định nào dựa trên yêu cầu của bạn.

Thí dụ

Bây giờ, chúng ta hãy nối hai bảng đã đề cập ở trên trong câu lệnh SELECT như sau:

testdb=# SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION ALL
      SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
         ON COMPANY.ID = DEPARTMENT.EMP_ID;

Điều này sẽ tạo ra kết quả sau:

emp_id | name  | dept
--------+-------+--------------
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 | James | Finance
      3 | Teddy | Engineering
      4 | Mark  | Finance
      5 | David | Engineering
      6 | Kim   | Finance
      1 | Paul  | IT Billing
      2 | Allen | Engineering
      7 | James | Finance
      3 | Teddy | Engineering
      4 | Mark  | Finance
      5 | David | Engineering
      6 | Kim   | Finance
(14 rows)

PostgreSQL NULLlà thuật ngữ được sử dụng để biểu thị một giá trị bị thiếu. Giá trị NULL trong bảng là giá trị trong trường có vẻ như là trống.

Trường có giá trị NULL là trường không có giá trị. Điều rất quan trọng là phải hiểu rằng giá trị NULL khác với giá trị 0 hoặc trường có chứa khoảng trắng.

Cú pháp

Cú pháp cơ bản của việc sử dụng NULL trong khi tạo một bảng như sau:

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Đây, NOT NULLbiểu thị rằng cột phải luôn chấp nhận một giá trị rõ ràng của kiểu dữ liệu đã cho. Có hai cột mà chúng tôi đã không sử dụng NOT NULL. Do đó, điều này có nghĩa là các cột này có thể là NULL.

Trường có giá trị NULL là trường đã bị bỏ trống trong quá trình tạo bản ghi.

Thí dụ

Giá trị NULL có thể gây ra vấn đề khi chọn dữ liệu, vì khi so sánh một giá trị chưa biết với bất kỳ giá trị nào khác, kết quả luôn không xác định và không được đưa vào kết quả cuối cùng. Hãy xem xét bảng sau, COMPANY có các bản ghi sau:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Hãy để chúng tôi sử dụng câu lệnh UPDATE để đặt một vài giá trị có thể null là NULL như sau:

testdb=# UPDATE COMPANY SET ADDRESS = NULL, SALARY = NULL where ID IN(6,7);

Bây giờ, bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  1 | Paul  |  32 | California  |  20000
  2 | Allen |  25 | Texas       |  15000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
  6 | Kim   |  22 |             |
  7 | James |  24 |             |
(7 rows)

Tiếp theo, hãy để chúng tôi xem việc sử dụng IS NOT NULL toán tử để liệt kê tất cả các bản ghi mà SALARY không phải là NULL -

testdb=#  SELECT  ID, NAME, AGE, ADDRESS, SALARY
   FROM COMPANY
   WHERE SALARY IS NOT NULL;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
(5 rows)

Sau đây là cách sử dụng IS NULL toán tử sẽ liệt kê tất cả các bản ghi có SALARY là NULL -

testdb=#  SELECT  ID, NAME, AGE, ADDRESS, SALARY
        FROM COMPANY
        WHERE SALARY IS NULL;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age | address | salary
----+-------+-----+---------+--------
  6 | Kim   |  22 |         |
  7 | James |  24 |         |
(2 rows)

Bạn có thể tạm thời đổi tên một bảng hoặc một cột bằng cách đặt một tên khác, được gọi là ALIAS. Việc sử dụng bí danh bảng có nghĩa là đổi tên bảng trong một câu lệnh PostgreSQL cụ thể. Đổi tên là một thay đổi tạm thời và tên bảng thực tế không thay đổi trong cơ sở dữ liệu.

Bí danh cột được sử dụng để đổi tên các cột của bảng cho mục đích của một truy vấn PostgreSQL cụ thể.

Cú pháp

Cú pháp cơ bản của table bí danh như sau:

SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];

Cú pháp cơ bản của column bí danh như sau:

SELECT column_name AS alias_name
FROM table_name
WHERE [condition];

Thí dụ

Hãy xem xét hai bảng sau, (a) bảng COMPANY như sau:

testdb=# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

(b) Một bảng khác là DEPARTMENT như sau:

id | dept         | emp_id
----+--------------+--------
  1 | IT Billing   |      1
  2 | Engineering  |      2
  3 | Finance      |      7
  4 | Engineering  |      3
  5 | Finance      |      4
  6 | Engineering  |      5
  7 | Finance      |      6
(7 rows)

Bây giờ, sau đây là cách sử dụng TABLE ALIAS trong đó chúng tôi sử dụng C và D làm bí danh cho các bảng COMPANY và DEPARTMENT, tương ứng -

testdb=# SELECT C.ID, C.NAME, C.AGE, D.DEPT
   FROM COMPANY AS C, DEPARTMENT AS D
   WHERE  C.ID = D.EMP_ID;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

id | name  | age |  dept
----+-------+-----+------------
  1 | Paul  |  32 | IT Billing
  2 | Allen |  25 | Engineering
  7 | James |  24 | Finance
  3 | Teddy |  23 | Engineering
  4 | Mark  |  25 | Finance
  5 | David |  27 | Engineering
  6 | Kim   |  22 | Finance
(7 rows)

Hãy để chúng tôi xem một ví dụ về việc sử dụng COLUMN ALIAS trong đó COMPANY_ID là bí danh của cột ID và COMPANY_NAME là bí danh của cột tên -

testdb=# SELECT C.ID AS COMPANY_ID, C.NAME AS COMPANY_NAME, C.AGE, D.DEPT
   FROM COMPANY AS C, DEPARTMENT AS D
   WHERE  C.ID = D.EMP_ID;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

company_id | company_name | age | dept
------------+--------------+-----+------------
      1     | Paul         |  32 | IT Billing
      2     | Allen        |  25 | Engineering
      7     | James        |  24 | Finance
      3     | Teddy        |  23 | Engineering
      4     | Mark         |  25 | Finance
      5     | David        |  27 | Engineering
      6     | Kim          |  22 | Finance
(7 rows)

PostgreSQL Triggers là các hàm gọi lại cơ sở dữ liệu, được tự động thực hiện / gọi khi một sự kiện cơ sở dữ liệu cụ thể xảy ra.

Sau đây là những điểm quan trọng về trình kích hoạt PostgreSQL:

  • Trình kích hoạt PostgreSQL có thể được chỉ định để kích hoạt

    • Trước khi thực hiện thao tác trên một hàng (trước khi các ràng buộc được kiểm tra và thực hiện CHÈN, CẬP NHẬT hoặc XÓA)

    • Sau khi hoạt động hoàn thành (sau khi các ràng buộc được kiểm tra và CHÈN, CẬP NHẬT hoặc XÓA đã hoàn thành)

    • Thay vì thao tác (trong trường hợp chèn, cập nhật hoặc xóa trên một dạng xem)

  • Một trình kích hoạt được đánh dấu CHO TỪNG ROW được gọi một lần cho mỗi hàng mà thao tác sửa đổi. Ngược lại, trình kích hoạt được đánh dấu CHO TỪNG TRẠNG THÁI chỉ thực thi một lần cho bất kỳ hoạt động nhất định nào, bất kể nó sửa đổi bao nhiêu hàng.

  • Cả hai, mệnh đề WHEN và các hành động kích hoạt, đều có thể truy cập các phần tử của hàng đang được chèn, xóa hoặc cập nhật bằng cách sử dụng các tham chiếu của biểu mẫu NEW.column-nameOLD.column-name, trong đó tên-cột là tên của một cột từ bảng mà trình kích hoạt được liên kết với.

  • Nếu mệnh đề WHEN được cung cấp, các câu lệnh PostgreSQL được chỉ định chỉ được thực thi cho các hàng mà mệnh đề WHEN là đúng. Nếu không cung cấp mệnh đề WHEN, các câu lệnh PostgreSQL được thực thi cho tất cả các hàng.

  • Nếu nhiều trình kích hoạt cùng loại được xác định cho cùng một sự kiện, chúng sẽ được kích hoạt theo thứ tự bảng chữ cái theo tên.

  • Từ khóa BEFORE, AFTER hoặc INSTEAD OF xác định khi nào các hành động kích hoạt sẽ được thực hiện liên quan đến việc chèn, sửa đổi hoặc loại bỏ hàng được liên kết.

  • Trình kích hoạt sẽ tự động bị loại bỏ khi bảng liên kết với chúng bị loại bỏ.

  • Bảng được sửa đổi phải tồn tại trong cùng một cơ sở dữ liệu với bảng hoặc dạng xem mà trình kích hoạt được đính kèm và người ta phải sử dụng tablename, không phải database.tablename.

  • Tùy chọn CONSTRAINT khi được chỉ định sẽ tạo ra một trình kích hoạt ràng buộc . Điều này giống với một trình kích hoạt thông thường ngoại trừ việc có thể điều chỉnh thời gian kích hoạt của trình kích hoạt bằng cách sử dụng SET CONSTRAINTS. Các trình kích hoạt ràng buộc dự kiến ​​sẽ tạo ra một ngoại lệ khi các ràng buộc mà chúng triển khai bị vi phạm.

Cú pháp

Cú pháp cơ bản của việc tạo trigger như sau -

CREATE  TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
ON table_name
[
 -- Trigger logic goes here....
];

Đây, event_namecó thể là INSERT, DELETE, UPDATETRUNCATE hoạt động cơ sở dữ liệu trên bảng được đề cậptable_name. Bạn có thể tùy chọn chỉ định CHO TỪNG ROW sau tên bảng.

Sau đây là cú pháp tạo trình kích hoạt trên thao tác CẬP NHẬT trên một hoặc nhiều cột được chỉ định của bảng như sau:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
[
 -- Trigger logic goes here....
];

Thí dụ

Chúng ta hãy xem xét một trường hợp chúng ta muốn tiếp tục kiểm tra thử cho mọi bản ghi đang được chèn vào bảng COMPANY, mà chúng ta sẽ tạo mới như sau (Bỏ bảng COMPANY nếu bạn đã có).

testdb=# CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Để tiếp tục thử nghiệm kiểm tra, chúng tôi sẽ tạo một bảng mới có tên AUDIT nơi các thông báo nhật ký sẽ được chèn vào bất cứ khi nào có mục nhập trong bảng COMPANY cho một bản ghi mới -

testdb=# CREATE TABLE AUDIT(
   EMP_ID INT NOT NULL,
   ENTRY_DATE TEXT NOT NULL
);

Ở đây, ID là ID bản ghi AUDIT và EMP_ID là ID, sẽ đến từ bảng COMPANY và DATE sẽ giữ dấu thời gian khi bản ghi sẽ được tạo trong bảng COMPANY. Vì vậy, bây giờ chúng ta hãy tạo một trình kích hoạt trên bảng COMPANY như sau:

testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY
FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

Trong đó Audlogfunc () là một PostgreSQL procedure và có định nghĩa sau:

CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$
   BEGIN
      INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$example_table$ LANGUAGE plpgsql;

Bây giờ, chúng ta sẽ bắt đầu công việc thực tế. Hãy để chúng tôi bắt đầu chèn bản ghi vào bảng COMPANY, điều này sẽ dẫn đến việc tạo bản ghi nhật ký kiểm toán trong bảng AUDIT. Vì vậy, chúng ta hãy tạo một bản ghi trong bảng COMPANY như sau:

testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

Thao tác này sẽ tạo một bản ghi trong bảng COMPANY, như sau:

id | name | age | address      | salary
----+------+-----+--------------+--------
  1 | Paul |  32 | California   |  20000

Đồng thời, một bản ghi sẽ được tạo trong bảng AUDIT. Bản ghi này là kết quả của một trình kích hoạt, mà chúng tôi đã tạo trên thao tác INSERT trên bảng COMPANY. Tương tự, bạn có thể tạo trình kích hoạt của mình trên các hoạt động CẬP NHẬT và XÓA dựa trên yêu cầu của bạn.

emp_id |          entry_date
--------+-------------------------------
      1 | 2013-05-05 15:49:59.968+05:30
(1 row)

TRIGGERS danh sách

Bạn có thể liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu hiện tại từ pg_trigger bảng như sau -

testdb=# SELECT * FROM pg_trigger;

Câu lệnh PostgreSQL đã cho ở trên sẽ liệt kê tất cả các trình kích hoạt.

Nếu bạn muốn liệt kê các trình kích hoạt trên một bảng cụ thể, thì hãy sử dụng mệnh đề AND với tên bảng như sau:

testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

Câu lệnh PostgreSQL đã cho ở trên cũng sẽ chỉ liệt kê một mục nhập như sau:

tgname
-----------------
 example_trigger
(1 row)

Đang bỏ TRIGGERS

Sau đây là lệnh DROP, có thể được sử dụng để thả một trình kích hoạt hiện có -

testdb=# DROP TRIGGER trigger_name;

Chỉ mục là các bảng tra cứu đặc biệt mà công cụ tìm kiếm cơ sở dữ liệu có thể sử dụng để tăng tốc độ truy xuất dữ liệu. Nói một cách đơn giản, chỉ mục là một con trỏ đến dữ liệu trong một bảng. Một chỉ mục trong cơ sở dữ liệu rất giống với một chỉ mục ở phía sau một cuốn sách.

Ví dụ, nếu bạn muốn tham chiếu đến tất cả các trang trong một cuốn sách thảo luận về một chủ đề nào đó, trước tiên bạn phải tham khảo chỉ mục, mục lục này liệt kê tất cả các chủ đề theo thứ tự bảng chữ cái và sau đó tham chiếu đến một hoặc nhiều số trang cụ thể.

Một chỉ mục giúp tăng tốc các truy vấn SELECT và mệnh đề WHERE; tuy nhiên, nó làm chậm quá trình nhập dữ liệu, với các câu lệnh UPDATE và INSERT. Chỉ mục có thể được tạo hoặc giảm mà không ảnh hưởng đến dữ liệu.

Việc tạo chỉ mục bao gồm câu lệnh CREATE INDEX, cho phép bạn đặt tên cho chỉ mục, chỉ định bảng và cột hoặc các cột nào để lập chỉ mục và cho biết chỉ mục theo thứ tự tăng dần hay giảm dần.

Các chỉ mục cũng có thể là duy nhất, tương tự như ràng buộc UNIQUE, trong đó chỉ mục ngăn các mục nhập trùng lặp trong cột hoặc tổ hợp các cột mà trên đó có chỉ mục.

Lệnh CREATE INDEX

Cú pháp cơ bản của CREATE INDEX như sau -

CREATE INDEX index_name ON table_name;

Các loại chỉ mục

PostgreSQL cung cấp một số kiểu chỉ mục: B-tree, Hash, GiST, SP-GiST và GIN. Mỗi loại Chỉ mục sử dụng một thuật toán khác nhau phù hợp nhất với các loại truy vấn khác nhau. Theo mặc định, lệnh CREATE INDEX tạo các chỉ mục B-tree, phù hợp với các tình huống phổ biến nhất.

Chỉ mục một cột

Chỉ mục một cột là chỉ mục được tạo chỉ dựa trên một cột của bảng. Cú pháp cơ bản như sau:

CREATE INDEX index_name
ON table_name (column_name);

Chỉ mục nhiều cột

Chỉ mục nhiều cột được xác định trên nhiều cột của bảng. Cú pháp cơ bản như sau:

CREATE INDEX index_name
ON table_name (column1_name, column2_name);

Cho dù tạo chỉ mục một cột hay chỉ mục nhiều cột, hãy xem xét (các) cột mà bạn có thể sử dụng rất thường xuyên trong mệnh đề WHERE của truy vấn làm điều kiện lọc.

Nếu chỉ có một cột được sử dụng, chỉ mục một cột nên là lựa chọn. Nếu có hai hoặc nhiều cột thường được sử dụng trong mệnh đề WHERE làm bộ lọc, thì chỉ mục đa cột sẽ là lựa chọn tốt nhất.

Chỉ mục duy nhất

Chỉ mục duy nhất không chỉ được sử dụng cho hiệu suất mà còn cho tính toàn vẹn của dữ liệu. Chỉ mục duy nhất không cho phép chèn bất kỳ giá trị trùng lặp nào vào bảng. Cú pháp cơ bản như sau:

CREATE UNIQUE INDEX index_name
on table_name (column_name);

Chỉ mục một phần

Chỉ mục một phần là một chỉ mục được xây dựng trên một tập hợp con của một bảng; tập hợp con được xác định bởi một biểu thức điều kiện (được gọi là vị từ của chỉ số bộ phận). Chỉ mục chỉ chứa các mục nhập cho những hàng bảng thỏa mãn vị từ. Cú pháp cơ bản như sau:

CREATE INDEX index_name
on table_name (conditional_expression);

Chỉ mục ngầm định

Chỉ mục ngầm định là chỉ mục được tạo tự động bởi máy chủ cơ sở dữ liệu khi một đối tượng được tạo. Chỉ mục được tạo tự động cho các ràng buộc khóa chính và các ràng buộc duy nhất.

Thí dụ

Sau đây là một ví dụ mà chúng tôi sẽ tạo một chỉ mục trên bảng COMPANY cho cột lương -

# CREATE INDEX salary_index ON COMPANY (salary);

Bây giờ, hãy để chúng tôi liệt kê tất cả các chỉ số có sẵn trên bảng COMPANY bằng cách sử dụng \d company chỉ huy.

# \d company

Điều này sẽ tạo ra kết quả sau, trong đó company_pkey là một chỉ mục ngầm định, được tạo khi bảng được tạo.

Table "public.company"
 Column  |     Type      | Modifiers
---------+---------------+-----------
 id      | integer       | not null
 name    | text          | not null
 age     | integer       | not null
 address | character(50) |
 salary  | real          |
Indexes:
    "company_pkey" PRIMARY KEY, btree (id)
    "salary_index" btree (salary)

Bạn có thể liệt kê toàn bộ cơ sở dữ liệu chỉ mục bằng cách sử dụng \di lệnh -

Lệnh DROP INDEX

Một chỉ mục có thể bị loại bỏ bằng cách sử dụng PostgreSQL DROPchỉ huy. Cần cẩn thận khi giảm chỉ số vì hiệu suất có thể bị chậm lại hoặc được cải thiện.

Cú pháp cơ bản như sau:

DROP INDEX index_name;

Bạn có thể sử dụng câu lệnh sau để xóa chỉ mục đã tạo trước đó -

# DROP INDEX salary_index;

Khi nào thì chỉ mục nên được tránh?

Mặc dù các chỉ mục nhằm mục đích nâng cao hiệu suất của cơ sở dữ liệu, nhưng đôi khi chúng nên được tránh. Các nguyên tắc sau chỉ ra khi nào việc sử dụng chỉ mục nên được xem xét lại:

  • Chỉ mục không nên được sử dụng trên các bảng nhỏ.

  • Các bảng có hoạt động cập nhật hoặc chèn hàng loạt lớn, thường xuyên.

  • Chỉ mục không được sử dụng trên các cột chứa nhiều giá trị NULL.

  • Các cột được thao tác thường xuyên sẽ không được lập chỉ mục.

PostgreSQL ALTER TABLE lệnh được sử dụng để thêm, xóa hoặc sửa đổi các cột trong bảng hiện có.

Bạn cũng sẽ sử dụng lệnh ALTER TABLE để thêm và thả các ràng buộc khác nhau trên một bảng hiện có.

Cú pháp

Cú pháp cơ bản của ALTER TABLE để thêm một cột mới trong bảng hiện có như sau:

ALTER TABLE table_name ADD column_name datatype;

Cú pháp cơ bản của ALTER TABLE thành DROP COLUMN trong một bảng hiện có như sau:

ALTER TABLE table_name DROP COLUMN column_name;

Cú pháp cơ bản của ALTER TABLE để thay đổi DATA TYPE của một cột trong bảng như sau:

ALTER TABLE table_name ALTER COLUMN column_name TYPE datatype;

Cú pháp cơ bản của ALTER TABLE để thêm NOT NULL ràng buộc đối với một cột trong bảng như sau:

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

Cú pháp cơ bản của ALTER TABLE thành ADD UNIQUE CONSTRAINT vào một bảng như sau:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);

Cú pháp cơ bản của ALTER TABLE thành ADD CHECK CONSTRAINT vào một bảng như sau:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);

Cú pháp cơ bản của ALTER TABLE thành ADD PRIMARY KEY ràng buộc đối với một bảng như sau:

ALTER TABLE table_name
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);

Cú pháp cơ bản của ALTER TABLE thành DROP CONSTRAINT từ một bảng như sau:

ALTER TABLE table_name
DROP CONSTRAINT MyUniqueConstraint;

Nếu bạn đang sử dụng MySQL, mã như sau:

ALTER TABLE table_name
DROP INDEX MyUniqueConstraint;

Cú pháp cơ bản của ALTER TABLE thành DROP PRIMARY KEY ràng buộc từ một bảng như sau:

ALTER TABLE table_name
DROP CONSTRAINT MyPrimaryKey;

Nếu bạn đang sử dụng MySQL, mã như sau:

ALTER TABLE table_name
DROP PRIMARY KEY;

Thí dụ

Hãy xem xét bảng CÔNG TY của chúng tôi có các bản ghi sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Sau đây là ví dụ để THÊM một cột mới trong bảng hiện có:

testdb=# ALTER TABLE COMPANY ADD GENDER char(1);

Bây giờ, bảng COMPANY đã được thay đổi và sau đây sẽ là kết quả từ câu lệnh SELECT -

id | name  | age | address     | salary | gender
----+-------+-----+-------------+--------+--------
  1 | Paul  |  32 | California  |  20000 |
  2 | Allen |  25 | Texas       |  15000 |
  3 | Teddy |  23 | Norway      |  20000 |
  4 | Mark  |  25 | Rich-Mond   |  65000 |
  5 | David |  27 | Texas       |  85000 |
  6 | Kim   |  22 | South-Hall  |  45000 |
  7 | James |  24 | Houston     |  10000 |
(7 rows)

Sau đây là ví dụ để XÓA cột giới tính khỏi bảng hiện có -

testdb=# ALTER TABLE COMPANY DROP GENDER;

Bây giờ, bảng COMPANY đã được thay đổi và sau đây sẽ là kết quả từ câu lệnh SELECT -

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

PostgreSQL TRUNCATE TABLElệnh được sử dụng để xóa dữ liệu hoàn chỉnh khỏi bảng hiện có. Bạn cũng có thể sử dụng lệnh DROP TABLE để xóa toàn bộ bảng nhưng nó sẽ xóa cấu trúc bảng hoàn chỉnh khỏi cơ sở dữ liệu và bạn sẽ cần phải tạo lại bảng này một lần nữa nếu muốn lưu trữ một số dữ liệu.

Nó có tác dụng tương tự như XÓA trên mỗi bảng, nhưng vì nó không thực sự quét các bảng nên nó nhanh hơn. Hơn nữa, nó lấy lại không gian đĩa ngay lập tức, thay vì yêu cầu một hoạt động VACUUM tiếp theo. Điều này hữu ích nhất trên các bảng lớn.

Cú pháp

Cú pháp cơ bản của TRUNCATE TABLE như sau -

TRUNCATE TABLE  table_name;

Thí dụ

Xem xét bảng COMPANY có các bản ghi sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(7 rows)

Sau đây là ví dụ để cắt ngắn -

testdb=# TRUNCATE TABLE COMPANY;

Bây giờ, bảng COMPANY bị cắt bớt và phần sau sẽ là kết quả của câu lệnh SELECT:

testdb=# SELECT * FROM CUSTOMERS;
 id | name | age | address | salary
----+------+-----+---------+--------
(0 rows)

Chế độ xem là bảng giả. Đó là, chúng không phải là bảng thực; tuy nhiên xuất hiện như các bảng bình thường để CHỌN. Một khung nhìn có thể đại diện cho một tập hợp con của một bảng thực, chọn một số cột hoặc một số hàng nhất định từ một bảng thông thường. Một khung nhìn thậm chí có thể đại diện cho các bảng đã tham gia. Vì các dạng xem được chỉ định các quyền riêng biệt, bạn có thể sử dụng chúng để hạn chế quyền truy cập vào bảng để người dùng chỉ thấy các hàng hoặc cột cụ thể của bảng.

Một dạng xem có thể chứa tất cả các hàng của bảng hoặc các hàng được chọn từ một hoặc nhiều bảng. Chế độ xem có thể được tạo từ một hoặc nhiều bảng, điều này phụ thuộc vào truy vấn PostgreSQL đã viết để tạo chế độ xem.

Chế độ xem, là một loại bảng ảo, cho phép người dùng thực hiện những việc sau:

  • Cấu trúc dữ liệu theo cách mà người dùng hoặc lớp người dùng thấy tự nhiên hoặc trực quan.

  • Hạn chế quyền truy cập vào dữ liệu để người dùng chỉ có thể xem dữ liệu hạn chế thay vì toàn bộ bảng.

  • Tổng hợp dữ liệu từ các bảng khác nhau, có thể được sử dụng để tạo báo cáo.

Vì các khung nhìn không phải là bảng thông thường, bạn có thể không thực hiện được câu lệnh DELETE, INSERT hoặc UPDATE trên một khung nhìn. Tuy nhiên, bạn có thể tạo RULE để khắc phục sự cố này bằng cách sử dụng DELETE, INSERT hoặc UPDATE trên một dạng xem.

Tạo chế độ xem

Dạng xem PostgreSQL được tạo bằng cách sử dụng CREATE VIEWtuyên bố. Các dạng xem PostgreSQL có thể được tạo từ một bảng, nhiều bảng hoặc một dạng xem khác.

Cú pháp CREATE VIEW cơ bản như sau:

CREATE [TEMP | TEMPORARY] VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

Bạn có thể bao gồm nhiều bảng trong câu lệnh SELECT của mình theo cách tương tự như cách bạn sử dụng chúng trong truy vấn PostgreSQL SELECT bình thường. Nếu có từ khóa TEMP hoặc TEMPORARY tùy chọn, chế độ xem sẽ được tạo trong không gian tạm thời. Chế độ xem tạm thời sẽ tự động bị loại bỏ vào cuối phiên hiện tại.

Thí dụ

Hãy xem xét, bảng COMPANY có các bản ghi sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000

Bây giờ, sau đây là một ví dụ để tạo một dạng xem từ bảng COMPANY. Chế độ xem này sẽ được sử dụng để chỉ có một số cột từ bảng COMPANY -

testdb=# CREATE VIEW COMPANY_VIEW AS
SELECT ID, NAME, AGE
FROM  COMPANY;

Bây giờ, bạn có thể truy vấn COMPANY_VIEW theo cách tương tự như khi bạn truy vấn một bảng thực tế. Sau đây là ví dụ -

testdb=# SELECT * FROM COMPANY_VIEW;

Điều này sẽ tạo ra kết quả sau:

id | name  | age
----+-------+-----
  1 | Paul  |  32
  2 | Allen |  25
  3 | Teddy |  23
  4 | Mark  |  25
  5 | David |  27
  6 | Kim   |  22
  7 | James |  24
(7 rows)

Giảm lượt xem

Để bỏ một chế độ xem, chỉ cần sử dụng câu lệnh DROP VIEW với view_name. Cú pháp DROP VIEW cơ bản như sau:

testdb=# DROP VIEW view_name;

Lệnh sau sẽ xóa chế độ xem COMPANY_VIEW, mà chúng tôi đã tạo trong phần trước -

testdb=# DROP VIEW COMPANY_VIEW;

Giao dịch là một đơn vị công việc được thực hiện dựa trên cơ sở dữ liệu. Giao dịch là các đơn vị hoặc chuỗi công việc được thực hiện theo một thứ tự logic, cho dù theo cách thủ công bởi người dùng hay tự động bởi một số loại chương trình cơ sở dữ liệu.

Giao dịch là sự truyền bá một hoặc nhiều thay đổi đối với cơ sở dữ liệu. Ví dụ: nếu bạn đang tạo bản ghi, cập nhật bản ghi hoặc xóa bản ghi khỏi bảng, thì bạn đang thực hiện giao dịch trên bảng. Điều quan trọng là kiểm soát các giao dịch để đảm bảo tính toàn vẹn của dữ liệu và xử lý các lỗi cơ sở dữ liệu.

Thực tế, bạn sẽ gộp nhiều truy vấn PostgreSQL thành một nhóm và bạn sẽ thực hiện tất cả chúng cùng nhau như một phần của giao dịch.

Thuộc tính của giao dịch

Các giao dịch có bốn thuộc tính tiêu chuẩn sau, thường được gọi bằng từ viết tắt ACID -

  • Atomicity- Đảm bảo rằng tất cả các hoạt động trong đơn vị công việc được hoàn thành thành công; nếu không, giao dịch bị hủy bỏ tại điểm không thành công và các hoạt động trước đó được khôi phục lại trạng thái cũ của chúng.

  • Consistency - Đảm bảo rằng cơ sở dữ liệu thay đổi đúng trạng thái khi giao dịch được cam kết thành công.

  • Isolation - Cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.

  • Durability - Đảm bảo rằng kết quả hoặc hiệu lực của giao dịch đã cam kết vẫn tồn tại trong trường hợp hệ thống bị lỗi.

Kiểm soát giao dịch

Các lệnh sau được sử dụng để kiểm soát các giao dịch:

  • BEGIN TRANSACTION - Để bắt đầu giao dịch.

  • COMMIT - Để lưu các thay đổi, bạn có thể sử dụng END TRANSACTION chỉ huy.

  • ROLLBACK - Để khôi phục các thay đổi.

Các lệnh điều khiển giao dịch chỉ được sử dụng với các lệnh DML chỉ INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong khi tạo bảng hoặc bỏ chúng vì các hoạt động này được tự động cam kết trong cơ sở dữ liệu.

Lệnh BEGIN GIAO DỊCH

Có thể bắt đầu giao dịch bằng BEGIN TRANSACTION hoặc đơn giản là lệnh BEGIN. Các giao dịch như vậy thường tồn tại cho đến khi gặp lệnh COMMIT hoặc ROLLBACK tiếp theo. Nhưng một giao dịch cũng sẽ QUAY LẠI nếu cơ sở dữ liệu bị đóng hoặc nếu xảy ra lỗi.

Sau đây là cú pháp đơn giản để bắt đầu một giao dịch:

BEGIN;

or

BEGIN TRANSACTION;

Lệnh COMMIT

Lệnh COMMIT là lệnh giao dịch được sử dụng để lưu các thay đổi được gọi bởi một giao dịch vào cơ sở dữ liệu.

Lệnh COMMIT lưu tất cả các giao dịch vào cơ sở dữ liệu kể từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp cho lệnh COMMIT như sau:

COMMIT;

or

END TRANSACTION;

Lệnh ROLLBACK

Lệnh ROLLBACK là lệnh giao dịch được sử dụng để hoàn tác các giao dịch chưa được lưu vào cơ sở dữ liệu.

Lệnh ROLLBACK chỉ có thể được sử dụng để hoàn tác các giao dịch kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành.

Cú pháp cho lệnh ROLLBACK như sau:

ROLLBACK;

Thí dụ

Hãy xem xét bảng COMPANY đang có các bản ghi sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Bây giờ, chúng ta hãy bắt đầu một giao dịch và xóa các bản ghi khỏi bảng có age = 25 và cuối cùng chúng ta sử dụng lệnh ROLLBACK để hoàn tác tất cả các thay đổi.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;

Nếu bạn kiểm tra, bảng COMPANY vẫn có các bản ghi sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000

Bây giờ, chúng ta hãy bắt đầu một giao dịch khác và xóa các bản ghi khỏi bảng có age = 25 và cuối cùng chúng ta sử dụng lệnh COMMIT để cam kết tất cả các thay đổi.

testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;

Nếu bạn kiểm tra bảng COMPANY, nó vẫn có các bản ghi sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  3 | Teddy |  23 | Norway     |  20000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000
(5 rows)

Khóa hoặc độc quyền khóa hoặc Write Khóa ngăn chặn người dùng thay đổi một hàng hoặc toàn bộ bảng. Các hàng được sửa đổi bởi UPDATE và DELETE sau đó được khóa độc quyền tự động trong suốt thời gian của giao dịch. Điều này ngăn người dùng khác thay đổi hàng cho đến khi giao dịch được cam kết hoặc khôi phục.

Lần duy nhất khi người dùng phải đợi người dùng khác là khi họ đang cố gắng sửa đổi cùng một hàng. Nếu họ sửa đổi các hàng khác nhau, không cần chờ đợi. Truy vấn CHỌN không bao giờ phải đợi.

Cơ sở dữ liệu thực hiện khóa tự động. Tuy nhiên, trong một số trường hợp nhất định, việc khóa phải được điều khiển bằng tay. Khóa thủ công có thể được thực hiện bằng cách sử dụng lệnh LOCK. Nó cho phép đặc tả loại và phạm vi khóa của giao dịch.

Cú pháp cho lệnh LOCK

Cú pháp cơ bản cho lệnh LOCK như sau:

LOCK [ TABLE ]
name
 IN
lock_mode
  • name- Tên (tùy chọn đủ điều kiện giản đồ) của bảng hiện có để khóa. Nếu CHỈ được chỉ định trước tên bảng, thì chỉ bảng đó bị khóa. Nếu ONLY không được chỉ định, bảng và tất cả các bảng con của nó (nếu có) sẽ bị khóa.

  • lock_mode- Chế độ khóa chỉ định khóa này xung đột với khóa nào. Nếu không có chế độ khóa nào được chỉ định, thì ACCESS EXCLUSIVE, chế độ hạn chế nhất, sẽ được sử dụng. Các giá trị có thể có là: ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE.

Sau khi lấy được, khóa sẽ được giữ trong phần còn lại của giao dịch hiện tại. Không có lệnh UNLOCK TABLE; khóa luôn được phát hành khi kết thúc giao dịch.

DeadLocks

Chốt lại có thể xảy ra khi hai giao dịch đang chờ nhau kết thúc hoạt động của chúng. Mặc dù PostgreSQL có thể phát hiện chúng và kết thúc chúng bằng ROLLBACK, nhưng deadlock vẫn có thể gây bất tiện. Để ngăn các ứng dụng của bạn gặp sự cố này, hãy đảm bảo thiết kế chúng theo cách khóa các đối tượng theo cùng một thứ tự.

Khóa tư vấn

PostgreSQL cung cấp các phương tiện để tạo các khóa có ý nghĩa do ứng dụng xác định. Chúng được gọi là khóa tư vấn . Vì hệ thống không thực thi việc sử dụng chúng nên việc sử dụng chúng một cách chính xác tùy thuộc vào ứng dụng. Các khóa tư vấn có thể hữu ích cho các chiến lược khóa không phù hợp với mô hình MVCC.

Ví dụ, cách sử dụng phổ biến của các khóa tư vấn là mô phỏng các chiến lược khóa bi quan điển hình của cái gọi là hệ thống quản lý dữ liệu "tệp phẳng". Mặc dù cờ được lưu trữ trong bảng có thể được sử dụng cho cùng một mục đích, nhưng khóa tư vấn nhanh hơn, tránh hiện tượng cồng kềnh bảng và được máy chủ tự động dọn dẹp vào cuối phiên.

Thí dụ

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Ví dụ sau khóa bảng COMPANY trong cơ sở dữ liệu testdb ở chế độ TRUY CẬP ĐỘC QUYỀN. Câu lệnh LOCK chỉ hoạt động trong chế độ giao dịch -

testdb=#BEGIN;
LOCK TABLE company1 IN ACCESS EXCLUSIVE MODE;

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

LOCK TABLE

Thông báo trên cho biết bảng bị khóa cho đến khi giao dịch kết thúc và để kết thúc giao dịch, bạn sẽ phải khôi phục hoặc cam kết giao dịch.

Truy vấn con hoặc Truy vấn bên trong hoặc Truy vấn lồng nhau là một truy vấn bên trong một truy vấn PostgreSQL khác và được nhúng trong mệnh đề WHERE.

Một truy vấn con được sử dụng để trả về dữ liệu sẽ được sử dụng trong truy vấn chính như một điều kiện để hạn chế hơn nữa dữ liệu được truy xuất.

Truy vấn con có thể được sử dụng với các câu lệnh SELECT, INSERT, UPDATE và DELETE cùng với các toán tử như =, <,>,> =, <=, IN, v.v.

Có một số quy tắc mà các truy vấn con phải tuân theo:

  • Truy vấn con phải được đặt trong dấu ngoặc đơn.

  • Một truy vấn con chỉ có thể có một cột trong mệnh đề SELECT, trừ khi có nhiều cột trong truy vấn chính để truy vấn con so sánh các cột đã chọn của nó.

  • Không thể sử dụng ORDER BY trong truy vấn phụ, mặc dù truy vấn chính có thể sử dụng ORDER BY. GROUP BY có thể được sử dụng để thực hiện chức năng tương tự như ORDER BY trong một truy vấn con.

  • Chỉ có thể sử dụng truy vấn con trả về nhiều hơn một hàng với nhiều toán tử giá trị, chẳng hạn như toán tử IN, EXISTS, NOT IN, ANY / SOME, ALL.

  • Toán tử GIỮA không thể được sử dụng với một truy vấn con; tuy nhiên, BETWEEN có thể được sử dụng trong truy vấn con.

Truy vấn con với câu lệnh SELECT

Truy vấn con được sử dụng thường xuyên nhất với câu lệnh SELECT. Cú pháp cơ bản như sau:

SELECT column_name [, column_name ]
FROM   table1 [, table2 ]
WHERE  column_name OPERATOR
      (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])

Thí dụ

Xem xét bảng COMPANY có các bản ghi sau:

id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Bây giờ, chúng ta hãy kiểm tra truy vấn con sau với câu lệnh SELECT -

testdb=# SELECT *
   FROM COMPANY
   WHERE ID IN (SELECT ID
      FROM COMPANY
      WHERE SALARY > 45000) ;

Điều này sẽ tạo ra kết quả sau:

id | name  | age |  address    | salary
----+-------+-----+-------------+--------
  4 | Mark  |  25 | Rich-Mond   |  65000
  5 | David |  27 | Texas       |  85000
(2 rows)

Truy vấn con với câu lệnh INSERT

Truy vấn con cũng có thể được sử dụng với câu lệnh INSERT. Câu lệnh INSERT sử dụng dữ liệu trả về từ truy vấn con để chèn vào một bảng khác. Dữ liệu đã chọn trong truy vấn con có thể được sửa đổi bằng bất kỳ hàm ký tự, ngày tháng hoặc số nào.

Cú pháp cơ bản như sau:

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ] ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Thí dụ

Hãy xem xét một bảng COMPANY_BKP, có cấu trúc tương tự như bảng COMPANY và có thể được tạo bằng cách sử dụng cùng một TẠO BẢNG bằng cách sử dụng COMPANY_BKP làm tên bảng. Bây giờ, để sao chép bảng COMPANY hoàn chỉnh vào COMPANY_BKP, sau đây là cú pháp:

testdb=# INSERT INTO COMPANY_BKP
   SELECT * FROM COMPANY
   WHERE ID IN (SELECT ID
      FROM COMPANY) ;

Truy vấn con với Tuyên bố UPDATE

Truy vấn con có thể được sử dụng cùng với câu lệnh UPDATE. Có thể cập nhật một hoặc nhiều cột trong bảng khi sử dụng truy vấn con với câu lệnh UPDATE.

Cú pháp cơ bản như sau:

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Thí dụ

Giả sử, chúng ta có sẵn bảng COMPANY_BKP, là bản sao lưu của bảng COMPANY.

Ví dụ sau cập nhật LƯƠNG gấp 0,50 lần trong bảng CÔNG TY cho tất cả các khách hàng có TUỔI THỌ lớn hơn hoặc bằng 27 -

testdb=# UPDATE COMPANY
   SET SALARY = SALARY * 0.50
   WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
      WHERE AGE >= 27 );

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  2 | Allen |  25 | Texas       |  15000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
  6 | Kim   |  22 | South-Hall  |  45000
  7 | James |  24 | Houston     |  10000
  1 | Paul  |  32 | California  |  10000
  5 | David |  27 | Texas       |  42500
(7 rows)

Truy vấn con với Tuyên bố DELETE

Truy vấn con có thể được sử dụng cùng với câu lệnh DELETE giống như với bất kỳ câu lệnh nào khác được đề cập ở trên.

Cú pháp cơ bản như sau:

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
   FROM TABLE_NAME)
   [ WHERE) ]

Thí dụ

Giả sử, chúng ta có sẵn bảng COMPANY_BKP, đây là bản sao lưu của bảng COMPANY.

Ví dụ sau đây xóa các bản ghi khỏi bảng COMPANY đối với tất cả các khách hàng có AGE lớn hơn hoặc bằng 27 -

testdb=# DELETE FROM COMPANY
   WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
      WHERE AGE > 27 );

Điều này sẽ ảnh hưởng đến hai hàng và cuối cùng bảng COMPANY sẽ có các bản ghi sau:

id | name  | age | address     | salary
----+-------+-----+-------------+--------
  2 | Allen |  25 | Texas       |  15000
  3 | Teddy |  23 | Norway      |  20000
  4 | Mark  |  25 | Rich-Mond   |  65000
  6 | Kim   |  22 | South-Hall  |  45000
  7 | James |  24 | Houston     |  10000
  5 | David |  27 | Texas       |  42500
(6 rows)

PostgreSQL có các kiểu dữ liệu smallserial , serial và bigserial ; đây không phải là các kiểu true, mà chỉ đơn thuần là sự tiện lợi về mặt ký hiệu để tạo các cột định danh duy nhất. Chúng tương tự như thuộc tính AUTO_INCREMENT được hỗ trợ bởi một số cơ sở dữ liệu khác.

Nếu bạn muốn một cột nối tiếp có một ràng buộc duy nhất hoặc là một khóa chính, thì bây giờ nó phải được chỉ định, giống như bất kỳ kiểu dữ liệu nào khác.

Tên kiểu nối tiếp tạo ra một cột số nguyên . Tên loại bigserial tạo ra một cột bigint . bigserial nên được sử dụng nếu bạn dự đoán việc sử dụng hơn 2 31 số nhận dạng trong suốt thời gian tồn tại của bảng. Tên loại smallserial tạo ra một cột smallint .

Cú pháp

Cách sử dụng cơ bản của SERIAL dataype như sau:

CREATE TABLE tablename (
   colname SERIAL
);

Thí dụ

Hãy xem xét bảng COMPANY sẽ được tạo như sau:

testdb=# CREATE TABLE COMPANY(
   ID  SERIAL PRIMARY KEY,
   NAME           TEXT      NOT NULL,
   AGE            INT       NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Bây giờ, hãy chèn các bản ghi sau vào bảng COMPANY -

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Paul', 32, 'California', 20000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Allen', 25, 'Texas', 15000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ('Teddy', 23, 'Norway', 20000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'David', 27, 'Texas', 85000.00 );


INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'Kim', 22, 'South-Hall', 45000.00 );

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
VALUES ( 'James', 24, 'Houston', 10000.00 );

Điều này sẽ chèn bảy bộ giá trị vào bảng COMPANY và COMPANY sẽ có các bản ghi sau:

id | name  | age | address    | salary
----+-------+-----+------------+--------
  1 | Paul  |  32 | California |  20000
  2 | Allen |  25 | Texas      |  15000
  3 | Teddy |  23 | Norway     |  20000
  4 | Mark  |  25 | Rich-Mond  |  65000
  5 | David |  27 | Texas      |  85000
  6 | Kim   |  22 | South-Hall |  45000
  7 | James |  24 | Houston    |  10000

Bất cứ khi nào một đối tượng được tạo trong cơ sở dữ liệu, chủ sở hữu sẽ được gán cho nó. Chủ sở hữu thường là người thực hiện câu lệnh tạo. Đối với hầu hết các loại đối tượng, trạng thái ban đầu là chỉ chủ sở hữu (hoặc người cấp cao) mới có thể sửa đổi hoặc xóa đối tượng. Để cho phép các vai trò hoặc người dùng khác sử dụng nó, bạn phải cấp đặc quyền hoặc quyền.

Các loại đặc quyền khác nhau trong PostgreSQL là:

  • SELECT,
  • INSERT,
  • UPDATE,
  • DELETE,
  • TRUNCATE,
  • REFERENCES,
  • TRIGGER,
  • CREATE,
  • CONNECT,
  • TEMPORARY,
  • THỰC HIỆN và
  • USAGE

Tùy thuộc vào loại đối tượng (bảng, hàm, v.v.), các đặc quyền được áp dụng cho đối tượng. Để gán đặc quyền cho người dùng, lệnh GRANT được sử dụng.

Cú pháp cho GRANT

Cú pháp cơ bản cho lệnh GRANT như sau:

GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
  • privilege - giá trị có thể là: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.

  • object- Tên của một đối tượng để cấp quyền truy cập. Các đối tượng có thể là: bảng, khung nhìn, chuỗi

  • PUBLIC - Một biểu mẫu ngắn đại diện cho tất cả người dùng.

  • NHÓM group - Một nhóm cấp đặc quyền cho ai.

  • username- Tên của người dùng được cấp đặc quyền. PUBLIC là một hình thức ngắn đại diện cho tất cả người dùng.

Các đặc quyền có thể được thu hồi bằng lệnh REVOKE.

Cú pháp REVOKE

Cú pháp cơ bản cho lệnh REVOKE như sau:

REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
  • privilege - giá trị có thể là: SELECT, INSERT, UPDATE, DELETE, RULE, ALL.

  • object- Tên của một đối tượng để cấp quyền truy cập. Các đối tượng có thể là: bảng, khung nhìn, chuỗi

  • PUBLIC - Một biểu mẫu ngắn đại diện cho tất cả người dùng.

  • NHÓM group - Một nhóm cấp đặc quyền cho ai.

  • username- Tên của người dùng được cấp đặc quyền. PUBLIC là một hình thức ngắn đại diện cho tất cả người dùng.

Thí dụ

Để hiểu các đặc quyền, trước tiên chúng ta hãy tạo NGƯỜI DÙNG như sau:

testdb=# CREATE USER manisha WITH PASSWORD 'password';
CREATE ROLE

Thông báo CREATE ROLE cho biết rằng USER "manisha" đã được tạo.

Xem xét bảng COMPANY có các bản ghi như sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Tiếp theo, hãy để chúng tôi cấp tất cả các đặc quyền trên bảng COMPANY cho người dùng "manisha" như sau:

testdb=# GRANT ALL ON COMPANY TO manisha;
GRANT

Thông báo GRANT cho biết rằng tất cả các đặc quyền được gán cho NGƯỜI DÙNG.

Tiếp theo, chúng ta hãy thu hồi các đặc quyền từ USER "manisha" như sau:

testdb=# REVOKE ALL ON COMPANY FROM manisha;
REVOKE

Thông báo REVOKE cho biết rằng tất cả các đặc quyền đã bị thu hồi từ NGƯỜI DÙNG.

Bạn thậm chí có thể xóa người dùng như sau:

testdb=# DROP USER manisha;
DROP ROLE

Thông báo DROP ROLE cho biết NGƯỜI DÙNG 'Manisha' đã bị xóa khỏi cơ sở dữ liệu.

Chúng ta đã thảo luận về các kiểu dữ liệu Ngày / Giờ trong chương Các kiểu dữ liệu . Bây giờ, chúng ta hãy xem các toán tử Ngày / Giờ và Hàm.

Bảng sau liệt kê các hành vi của các toán tử số học cơ bản:

Nhà điều hành Thí dụ Kết quả
+ ngày '2001-09-28' + số nguyên '7' ngày '2001-10-05'
+ ngày '2001-09-28' + khoảng thời gian '1 giờ' dấu thời gian '2001-09-28 01:00:00'
+ ngày '2001-09-28' + giờ '03: 00 ' dấu thời gian '2001-09-28 03:00:00'
+ khoảng thời gian '1 ngày' + khoảng thời gian '1 giờ' khoảng thời gian '1 ngày 01:00:00'
+ dấu thời gian '2001-09-28 01:00' + khoảng thời gian '23 giờ' dấu thời gian '2001-09-29 00:00:00'
+ thời gian '01: 00 '+ khoảng thời gian' 3 giờ ' thời gian '04: 00: 00 '
- - khoảng thời gian '23 giờ' khoảng thời gian '-23: 00: 00'
- ngày '2001-10-01' - ngày '2001-09-28' số nguyên '3' (ngày)
- ngày '2001-10-01' - số nguyên '7' ngày '2001-09-24'
- ngày '2001-09-28' - khoảng thời gian '1 giờ' dấu thời gian '2001-09-27 23:00:00'
- time '05: 00 '- time '03: 00' khoảng thời gian '02: 00: 00 '
- thời gian '05: 00 '- khoảng thời gian' 2 giờ ' thời gian '03: 00: 00 '
- dấu thời gian '2001-09-28 23:00' - khoảng thời gian '23 giờ' dấu thời gian '2001-09-28 00:00:00'
- khoảng thời gian '1 ngày' - khoảng thời gian '1 giờ' khoảng thời gian '1 ngày -01: 00: 00'
- dấu thời gian '2001-09-29 03:00' - dấu thời gian '2001-09-27 12:00' khoảng thời gian '1 ngày 15:00:00'
* 900 * khoảng thời gian '1 giây' khoảng thời gian '00: 15: 00 '
* 21 * khoảng thời gian '1 ngày' khoảng thời gian '21 ngày '
* độ chính xác kép '3,5' * khoảng thời gian '1 giờ' khoảng thời gian '03: 30: 00'
/ khoảng thời gian '1 giờ' / độ chính xác gấp đôi '1,5' khoảng thời gian '00: 40: 00 '

Sau đây là danh sách tất cả các chức năng quan trọng liên quan đến Ngày và Giờ có sẵn.

S. Không. Mô tả chức năng
1 TUỔI TÁC()

Trừ các đối số

2 NGÀY / GIỜ HIỆN TẠI ()

Ngày và giờ hiện tại

3 DATE_PART ()

Nhận trường con (tương đương với giải nén)

4 TRÍCH XUẤT()

Nhận trường con

5 ISFINITE ()

Kiểm tra ngày, giờ và khoảng thời gian hữu hạn (không phải +/- vô cực)

6 JUSTIFY

Điều chỉnh khoảng thời gian

AGE (dấu thời gian, dấu thời gian), AGE (dấu thời gian)

S. Không. Mô tả chức năng
1

AGE(timestamp, timestamp)

Khi được gọi với dạng TIMESTAMP của đối số thứ hai, AGE () trừ các đối số, tạo ra kết quả "tượng trưng" sử dụng năm và tháng và thuộc loại INTERVAL.

2

AGE(timestamp)

Khi được gọi với chỉ TIMESTAMP làm đối số, AGE () sẽ trừ khỏi ngày_của_đây (vào lúc nửa đêm).

Ví dụ về hàm AGE (timestamp, timestamp) là -

testdb=# SELECT AGE(timestamp '2001-04-10', timestamp '1957-06-13');

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

age
-------------------------
 43 years 9 mons 27 days

Ví dụ về hàm AGE (dấu thời gian) là -

testdb=# select age(timestamp '1957-06-13');

Câu lệnh PostgreSQL đã cho ở trên sẽ tạo ra kết quả sau:

age
--------------------------
 55 years 10 mons 22 days

NGÀY / GIỜ HIỆN TẠI ()

PostgreSQL cung cấp một số hàm trả về giá trị liên quan đến ngày giờ hiện tại. Sau đây là một số chức năng -

S. Không. Mô tả chức năng
1

CURRENT_DATE

Cung cấp ngày hiện tại.

2

CURRENT_TIME

Cung cấp giá trị theo múi giờ.

3

CURRENT_TIMESTAMP

Cung cấp giá trị theo múi giờ.

4

CURRENT_TIME(precision)

Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây.

5

CURRENT_TIMESTAMP(precision)

Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây.

6

LOCALTIME

Cung cấp giá trị không có múi giờ.

7

LOCALTIMESTAMP

Cung cấp giá trị không có múi giờ.

số 8

LOCALTIME(precision)

Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây.

9

LOCALTIMESTAMP(precision)

Tùy chọn nhận một tham số chính xác, làm cho kết quả được làm tròn thành nhiều chữ số phân số trong trường giây.

Ví dụ sử dụng các hàm từ bảng trên -

testdb=# SELECT CURRENT_TIME;
       timetz
--------------------
 08:01:34.656+05:30
(1 row)


testdb=# SELECT CURRENT_DATE;
    date
------------
 2013-05-05
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP;
              now
-------------------------------
 2013-05-05 08:01:45.375+05:30
(1 row)


testdb=# SELECT CURRENT_TIMESTAMP(2);
         timestamptz
------------------------------
 2013-05-05 08:01:50.89+05:30
(1 row)


testdb=# SELECT LOCALTIMESTAMP;
       timestamp
------------------------
 2013-05-05 08:01:55.75
(1 row)

PostgreSQL cũng cung cấp các hàm trả về thời gian bắt đầu của câu lệnh hiện tại, cũng như thời gian hiện tại thực tế tại thời điểm hàm được gọi. Các chức năng này là -

S. Không. Mô tả chức năng
1

transaction_timestamp()

Nó tương đương với CURRENT_TIMESTAMP, nhưng được đặt tên để phản ánh rõ ràng những gì nó trả về.

2

statement_timestamp()

Nó trả về thời gian bắt đầu của câu lệnh hiện tại.

3

clock_timestamp()

Nó trả về thời gian hiện tại thực tế và do đó giá trị của nó thay đổi ngay cả trong một lệnh SQL duy nhất.

4

timeofday()

Nó trả về thời gian hiện tại thực tế, nhưng dưới dạng một chuỗi văn bản được định dạng chứ không phải là một dấu thời gian với giá trị múi giờ.

5

now()

Nó là một PostgreSQL truyền thống tương đương với transaction_timestamp ().

DATE_PART (văn bản, dấu thời gian), DATE_PART (văn bản, khoảng thời gian), DATE_TRUNC (văn bản, dấu thời gian)

S. Không. Mô tả chức năng
1

DATE_PART('field', source)

Các hàm này lấy các trường con. Các lĩnh vực thông số cần phải được một giá trị chuỗi, không phải là một cái tên.

Các tên trường hợp lệ là: thế kỷ, ngày, thập kỷ, giảm, doy, kỷ nguyên, giờ, isodow, isoyear, micro giây, thiên niên kỷ, mili giây, phút, tháng, quý, giây, múi giờ, timezone_hour, timezone_minute, tuần, năm.

2

DATE_TRUNC('field', source)

Hàm này về mặt khái niệm tương tự như hàm trunc cho số. nguồn là một biểu thức giá trị của loại dấu thời gian hoặc khoảng thời gian. trường chọn độ chính xác để cắt bớt giá trị đầu vào. Giá trị trả về thuộc loại dấu thời gian hoặc khoảng thời gian .

Các giá trị hợp lệ cho trường là: micro giây, mili giây, giây, phút, giờ, ngày, tuần, tháng, quý, năm, thập kỷ, thế kỷ, thiên niên kỷ

Sau đây là các ví dụ cho các hàm DATE_PART ( 'trường' , nguồn) -

testdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)


testdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
 date_part
-----------
         4
(1 row)

Sau đây là các ví dụ cho các hàm DATE_TRUNC ( 'trường' , nguồn) -

testdb=# SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-02-16 20:00:00
(1 row)


testdb=# SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
     date_trunc
---------------------
 2001-01-01 00:00:00
(1 row)

EXTRACT (trường từ dấu thời gian), EXTRACT (trường từ khoảng thời gian)

Các EXTRACT(field FROM source)hàm lấy ra các trường con như năm hoặc giờ từ các giá trị ngày / giờ. Các nguồn phải là một biểu hiện giá trị của loại dấu thời gian, thời gian, hoặc khoảng thời gian . Các lĩnh vực là một định danh hoặc chuỗi mà chọn những gì trường để chiết xuất từ giá trị nguồn. Hàm EXTRACT trả về giá trị của kiểu chính xác kép .

Sau đây là các tên trường hợp lệ (tương tự như tên trường hàm DATE_PART): thế kỷ, ngày, thập kỷ, giảm, doy, kỷ nguyên, giờ, isodow, isoyear, micro giây, thiên niên kỷ, mili giây, phút, tháng, quý, giây, múi giờ, timezone_hour , timezone_minute, tuần, năm.

Sau đây là các ví dụ về hàm EXTRACT ( 'trường' , nguồn) -

testdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13');
 date_part
-----------
        20
(1 row)


testdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
 date_part
-----------
        16
(1 row)

ISFINITE (ngày), ISFINITE (dấu thời gian), ISFINITE (khoảng thời gian)

S. Không. Mô tả chức năng
1

ISFINITE(date)

Kiểm tra cho ngày hữu hạn.

2

ISFINITE(timestamp)

Kiểm tra tem thời gian hữu hạn.

3

ISFINITE(interval)

Kiểm tra cho khoảng thời gian hữu hạn.

Sau đây là các ví dụ về hàm ISFINITE () -

testdb=# SELECT isfinite(date '2001-02-16');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30');
 isfinite
----------
 t
(1 row)


testdb=# SELECT isfinite(interval '4 hours');
 isfinite
----------
 t
(1 row)

JUSTIFY_DAYS (khoảng thời gian), JUSTIFY_HOURS (khoảng thời gian), JUSTIFY_INTERVAL (khoảng thời gian)

S. Không. Mô tả chức năng
1

JUSTIFY_DAYS(interval)

Điều chỉnh khoảng thời gian để khoảng thời gian 30 ngày được biểu thị dưới dạng tháng. Trả lạiinterval kiểu

2

JUSTIFY_HOURS(interval)

Điều chỉnh khoảng thời gian để khoảng thời gian 24 giờ được biểu thị dưới dạng ngày. Trả lạiinterval kiểu

3

JUSTIFY_INTERVAL(interval)

Điều chỉnh khoảng thời gian bằng cách sử dụng JUSTIFY_DAYS và JUSTIFY_HOURS, với các điều chỉnh dấu hiệu bổ sung. Trả lạiinterval kiểu

Sau đây là các ví dụ cho các hàm ISFINITE () -

testdb=# SELECT justify_days(interval '35 days');
 justify_days
--------------
 1 mon 5 days
(1 row)


testdb=# SELECT justify_hours(interval '27 hours');
 justify_hours
----------------
 1 day 03:00:00
(1 row)


testdb=# SELECT justify_interval(interval '1 mon -1 hour');
 justify_interval
------------------
 29 days 23:00:00
(1 row)

PostgreSQL functions, còn được gọi là Thủ tục được lưu trữ, cho phép bạn thực hiện các hoạt động thường thực hiện một số truy vấn và các chuyến đi vòng trong một hàm duy nhất trong cơ sở dữ liệu. Các chức năng cho phép tái sử dụng cơ sở dữ liệu vì các ứng dụng khác có thể tương tác trực tiếp với các thủ tục được lưu trữ của bạn thay vì mã cấp giữa hoặc mã trùng lặp.

Các hàm có thể được tạo bằng ngôn ngữ bạn chọn như SQL, PL / pgSQL, C, Python, v.v.

Cú pháp

Cú pháp cơ bản để tạo một hàm như sau:

CREATE [OR REPLACE] FUNCTION function_name (arguments) 
RETURNS return_datatype AS $variable_name$
   DECLARE
      declaration;
      [...]
   BEGIN
      < function_body >
      [...]
      RETURN { variable_name | value }
   END; LANGUAGE plpgsql;

Ở đâu,

  • function-name chỉ định tên của hàm.

  • Tùy chọn [HOẶC THAY THẾ] cho phép sửa đổi một chức năng hiện có.

  • Hàm phải chứa một return tuyên bố.

  • RETURNmệnh đề chỉ định kiểu dữ liệu mà bạn sẽ trả về từ hàm. Cácreturn_datatype có thể là kiểu cơ sở, tổ hợp hoặc miền, hoặc có thể tham chiếu kiểu cột trong bảng.

  • function-body chứa phần thực thi.

  • Từ khóa AS được sử dụng để tạo một hàm độc lập.

  • plpgsqllà tên của ngôn ngữ mà hàm được triển khai. Ở đây, chúng tôi sử dụng tùy chọn này cho PostgreSQL, nó Có thể là SQL, C, nội bộ hoặc tên của ngôn ngữ thủ tục do người dùng xác định. Để tương thích ngược, tên có thể được đặt trong dấu ngoặc kép.

Thí dụ

Ví dụ sau minh họa việc tạo và gọi một hàm độc lập. Hàm này trả về tổng số bản ghi trong bảng COMPANY. Chúng ta sẽ sử dụng bảng COMPANY , có các bản ghi sau:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

Hàm totalRecords () như sau:

CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
	total integer;
BEGIN
   SELECT count(*) into total FROM COMPANY;
   RETURN total;
END;
$total$ LANGUAGE plpgsql;

Khi truy vấn trên được thực thi, kết quả sẽ là:

testdb# CREATE FUNCTION

Bây giờ, chúng ta hãy thực hiện một lệnh gọi đến hàm này và kiểm tra các bản ghi trong bảng COMPANY

testdb=# select totalRecords();

Khi truy vấn trên được thực thi, kết quả sẽ là:

totalrecords
--------------
      7
(1 row)

Các hàm dựng sẵn trong PostgreSQL, còn được gọi là hàm Tổng hợp, được sử dụng để thực hiện xử lý trên dữ liệu chuỗi hoặc số.

Sau đây là danh sách tất cả các hàm tích hợp sẵn trong PostgreSQL có mục đích chung:

  • Hàm PostgreSQL COUNT - Hàm tổng hợp PostgreSQL COUNT được sử dụng để đếm số hàng trong bảng cơ sở dữ liệu.

  • Hàm PostgreSQL MAX - Hàm tổng hợp PostgreSQL MAX cho phép chúng ta chọn giá trị cao nhất (lớn nhất) cho một cột nhất định.

  • Hàm PostgreSQL MIN - Hàm tổng hợp PostgreSQL MIN cho phép chúng ta chọn giá trị thấp nhất (tối thiểu) cho một cột nhất định.

  • Hàm PostgreSQL AVG - Hàm tổng hợp PostgreSQL AVG chọn giá trị trung bình cho cột bảng nhất định.

  • Hàm PostgreSQL SUM - Hàm tổng hợp PostgreSQL SUM cho phép chọn tổng số cho một cột số.

  • Các hàm ARRAY của PostgreSQL - Hàm tổng hợp PostgreSQL ARRAY đặt các giá trị đầu vào, bao gồm cả null, được nối thành một mảng.

  • Các hàm PostgreSQL Numeric - Danh sách đầy đủ các hàm PostgreSQL cần thiết để thao tác với các số trong SQL.

  • Các hàm chuỗi PostgreSQL - Danh sách đầy đủ các hàm PostgreSQL cần thiết để thao tác các chuỗi trong PostgreSQL.

Hướng dẫn này sẽ sử dụng libpqxxthư viện, là API ứng dụng khách C ++ chính thức cho PostgreSQL. Mã nguồn của libpqxx có sẵn theo giấy phép BSD, vì vậy bạn có thể tự do tải xuống, chuyển cho người khác, thay đổi, bán, đưa nó vào mã của riêng bạn và chia sẻ các thay đổi của bạn với bất kỳ ai bạn chọn.

Cài đặt

Bạn có thể tải xuống phiên bản mới nhất của libpqxx từ liên kết Tải xuống Libpqxx . Vì vậy, hãy tải xuống phiên bản mới nhất và làm theo các bước sau:

wget http://pqxx.org/download/software/libpqxx/libpqxx-4.0.tar.gz
tar xvfz libpqxx-4.0.tar.gz
cd libpqxx-4.0
./configure
make
make install

Trước khi bạn bắt đầu sử dụng giao diện C / C ++ PostgreSQL, hãy tìm pg_hba.conf trong thư mục cài đặt PostgreSQL của bạn và thêm dòng sau:

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Bạn có thể khởi động / khởi động lại máy chủ postgres trong trường hợp nó không chạy bằng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API giao diện C / C ++

Sau đây là các quy trình giao diện quan trọng có thể đáp ứng yêu cầu của bạn để làm việc với cơ sở dữ liệu PostgreSQL từ chương trình C / C ++ của bạn. Nếu bạn đang tìm kiếm một ứng dụng phức tạp hơn thì bạn có thể xem tài liệu chính thức của libpqxx hoặc bạn có thể sử dụng các API có sẵn trên thị trường.

S. Không. API & Mô tả
1

pqxx::connection C( const std::string & dbstring )

Đây là một typedef sẽ được sử dụng để kết nối với cơ sở dữ liệu. Ở đây, dbstring cung cấp các tham số bắt buộc để kết nối với cơ sở dữ liệu, ví dụ:dbname = testdb user = postgres password=pass123 hostaddr=127.0.0.1 port=5432.

Nếu kết nối được thiết lập thành công thì nó sẽ tạo C với đối tượng kết nối cung cấp các chức năng công cộng hữu ích khác nhau.

2

C.is_open()

Phương thức is_open () là một phương thức công khai của đối tượng kết nối và trả về giá trị boolean. Nếu kết nối đang hoạt động, thì phương thức này trả về true nếu không sẽ trả về false.

3

C.disconnect()

Phương pháp này được sử dụng để ngắt kết nối cơ sở dữ liệu đã mở.

4

pqxx::work W( C )

Đây là một typedef sẽ được sử dụng để tạo một đối tượng giao dịch bằng cách sử dụng kết nối C, cuối cùng sẽ được sử dụng để thực thi các câu lệnh SQL trong chế độ giao dịch.

Nếu đối tượng giao dịch được tạo thành công, thì nó được gán cho biến W sẽ được sử dụng để truy cập các phương thức công khai liên quan đến đối tượng giao dịch.

5

W.exec(const std::string & sql)

Phương thức công khai này từ đối tượng giao dịch sẽ được sử dụng để thực thi câu lệnh SQL.

6

W.commit()

Phương thức công khai này từ đối tượng giao dịch sẽ được sử dụng để thực hiện giao dịch.

7

W.abort()

Phương thức công khai này từ đối tượng giao dịch sẽ được sử dụng để khôi phục giao dịch.

số 8

pqxx::nontransaction N( C )

Đây là một typedef sẽ được sử dụng để tạo một đối tượng không giao dịch bằng cách sử dụng kết nối C, cuối cùng sẽ được sử dụng để thực thi các câu lệnh SQL trong chế độ không giao dịch.

Nếu đối tượng giao dịch được tạo thành công, thì nó được gán cho biến N sẽ được sử dụng để truy cập các phương thức công khai liên quan đến đối tượng không giao dịch.

9

N.exec(const std::string & sql)

Phương thức công khai này từ đối tượng không giao dịch sẽ được sử dụng để thực thi câu lệnh SQL và trả về một đối tượng kết quả thực sự là một số nguyên chứa tất cả các bản ghi được trả về.

Kết nối với cơ sở dữ liệu

Đoạn mã C sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có đang chạy trên máy cục bộ tại cổng 5432. Ở đây, tôi đã sử dụng dấu gạch chéo ngược \ để tiếp tục dòng.

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }
}

Bây giờ, chúng ta hãy biên dịch và chạy chương trình trên để kết nối với cơ sở dữ liệu của chúng tôi testdb, đã có sẵn trong lược đồ của bạn và có thể được truy cập bằng cách sử dụng postgres của người dùng và mật khẩu pass123 .

Bạn có thể sử dụng ID người dùng và mật khẩu dựa trên cài đặt cơ sở dữ liệu của mình. Hãy nhớ giữ -lpqxx và -lpq theo thứ tự nhất định! Nếu không, trình liên kết sẽ phàn nàn gay gắt về các chức năng bị thiếu với tên bắt đầu bằng "PQ."

$g++ test.cpp -lpqxx -lpq $./a.out
Opened database successfully: testdb

Tạo bảng

Đoạn mã C sau sẽ được sử dụng để tạo một bảng trong cơ sở dữ liệu đã tạo trước đó:

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   char * sql;
   
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }

      /* Create SQL statement */
      sql = "CREATE TABLE COMPANY("  \
      "ID INT PRIMARY KEY     NOT NULL," \
      "NAME           TEXT    NOT NULL," \
      "AGE            INT     NOT NULL," \
      "ADDRESS        CHAR(50)," \
      "SALARY         REAL );";

      /* Create a transactional object. */
      work W(C);
      
      /* Execute SQL query */
      W.exec( sql );
      W.commit();
      cout << "Table created successfully" << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}

Khi chương trình đã cho ở trên được biên dịch và thực thi, nó sẽ tạo bảng COMPANY trong cơ sở dữ liệu testdb của bạn và sẽ hiển thị các câu lệnh sau:

Opened database successfully: testdb
Table created successfully

INSERT hoạt động

Đoạn mã C sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   char * sql;
   
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }

      /* Create SQL statement */
      sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \
         "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
         "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \
         "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "     \
         "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
         "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \
         "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
         "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";

      /* Create a transactional object. */
      work W(C);
      
      /* Execute SQL query */
      W.exec( sql );
      W.commit();
      cout << "Records created successfully" << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}

Khi chương trình đã cho ở trên được biên dịch và thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully: testdb
Records created successfully

CHỌN hoạt động

Đoạn mã C sau đây cho thấy cách chúng tôi có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng tôi được tạo trong ví dụ trên -

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   char * sql;
   
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }

      /* Create SQL statement */
      sql = "SELECT * from COMPANY";

      /* Create a non-transactional object. */
      nontransaction N(C);
      
      /* Execute SQL query */
      result R( N.exec( sql ));
      
      /* List down all the records */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Name = " << c[1].as<string>() << endl;
         cout << "Age = " << c[2].as<int>() << endl;
         cout << "Address = " << c[3].as<string>() << endl;
         cout << "Salary = " << c[4].as<float>() << endl;
      }
      cout << "Operation done successfully" << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}

Khi chương trình đã cho ở trên được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully: testdb
ID = 1
Name = Paul
Age = 32
Address = California
Salary = 20000
ID = 2
Name = Allen
Age = 25
Address = Texas
Salary = 15000
ID = 3
Name = Teddy
Age = 23
Address = Norway
Salary = 20000
ID = 4
Name = Mark
Age = 25
Address = Rich-Mond
Salary = 65000
Operation done successfully

CẬP NHẬT Hoạt động

Đoạn mã C sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   char * sql;
   
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      
      /* Create a transactional object. */
      work W(C);
      /* Create  SQL UPDATE statement */
      sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1";
      /* Execute SQL query */
      W.exec( sql );
      W.commit();
      cout << "Records updated successfully" << endl;
      
      /* Create SQL SELECT statement */
      sql = "SELECT * from COMPANY";

      /* Create a non-transactional object. */
      nontransaction N(C);
      
      /* Execute SQL query */
      result R( N.exec( sql ));
      
      /* List down all the records */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Name = " << c[1].as<string>() << endl;
         cout << "Age = " << c[2].as<int>() << endl;
         cout << "Address = " << c[3].as<string>() << endl;
         cout << "Salary = " << c[4].as<float>() << endl;
      }
      cout << "Operation done successfully" << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}

Khi chương trình đã cho ở trên được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully: testdb
Records updated successfully
ID = 2
Name = Allen
Age = 25
Address = Texas
Salary = 15000
ID = 3
Name = Teddy
Age = 23
Address = Norway
Salary = 20000
ID = 4
Name = Mark
Age = 25
Address = Rich-Mond
Salary = 65000
ID = 1
Name = Paul
Age = 32
Address = California
Salary = 25000
Operation done successfully

Thao tác DELETE

Đoạn mã C sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

#include <iostream>
#include <pqxx/pqxx> 

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[]) {
   char * sql;
   
   try {
      connection C("dbname = testdb user = postgres password = cohondob \
      hostaddr = 127.0.0.1 port = 5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      
      /* Create a transactional object. */
      work W(C);
      /* Create  SQL DELETE statement */
      sql = "DELETE from COMPANY where ID = 2";
      /* Execute SQL query */
      W.exec( sql );
      W.commit();
      cout << "Records deleted successfully" << endl;
      
      /* Create SQL SELECT statement */
      sql = "SELECT * from COMPANY";

      /* Create a non-transactional object. */
      nontransaction N(C);
      
      /* Execute SQL query */
      result R( N.exec( sql ));
      
      /* List down all the records */
      for (result::const_iterator c = R.begin(); c != R.end(); ++c) {
         cout << "ID = " << c[0].as<int>() << endl;
         cout << "Name = " << c[1].as<string>() << endl;
         cout << "Age = " << c[2].as<int>() << endl;
         cout << "Address = " << c[3].as<string>() << endl;
         cout << "Salary = " << c[4].as<float>() << endl;
      }
      cout << "Operation done successfully" << endl;
      C.disconnect ();
   } catch (const std::exception &e) {
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}

Khi chương trình đã cho ở trên được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully: testdb
Records deleted successfully
ID = 3
Name = Teddy
Age = 23
Address = Norway
Salary = 20000
ID = 4
Name = Mark
Age = 25
Address = Rich-Mond
Salary = 65000
ID = 1
Name = Paul
Age = 32
Address = California
Salary = 25000
Operation done successfully

Cài đặt

Trước khi bắt đầu sử dụng PostgreSQL trong các chương trình Java của mình, chúng ta cần đảm bảo rằng chúng ta đã thiết lập PostgreSQL JDBC và Java trên máy. Bạn có thể xem hướng dẫn Java để cài đặt Java trên máy của mình. Bây giờ chúng ta hãy kiểm tra cách thiết lập trình điều khiển PostgreSQL JDBC.

  • Tải xuống phiên bản mới nhất của postgresql- (VERSION) .jdbc.jar từ kho postgresql-jdbc .

  • Thêm tệp jar đã tải xuống postgresql- (VERSION) .jdbc.jar vào đường dẫn lớp của bạn hoặc bạn có thể sử dụng nó cùng với tùy chọn -classpath như được giải thích bên dưới trong các ví dụ.

Phần sau giả sử bạn có ít kiến ​​thức về các khái niệm Java JDBC. Nếu bạn chưa có, thì bạn nên dành nửa giờ đồng hồ với Hướng dẫn của JDBC để trở nên thoải mái với các khái niệm được giải thích bên dưới.

Kết nối với cơ sở dữ liệu

Đoạn mã Java sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu không tồn tại, thì nó sẽ được tạo và cuối cùng một đối tượng cơ sở dữ liệu sẽ được trả về.

import java.sql.Connection;
import java.sql.DriverManager;

public class PostgreSQLJDBC {
   public static void main(String args[]) {
      Connection c = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "postgres", "123");
      } catch (Exception e) {
         e.printStackTrace();
         System.err.println(e.getClass().getName()+": "+e.getMessage());
         System.exit(0);
      }
      System.out.println("Opened database successfully");
   }
}

Trước khi bạn biên dịch và chạy chương trình trên, hãy tìm pg_hba.conf trong thư mục cài đặt PostgreSQL của bạn và thêm dòng sau:

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Bạn có thể khởi động / khởi động lại máy chủ postgres trong trường hợp nó không chạy bằng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

Bây giờ, chúng ta hãy biên dịch và chạy chương trình trên để kết nối với testdb. Ở đây, chúng tôi đang sử dụngpostgres làm ID người dùng và 123làm mật khẩu để truy cập cơ sở dữ liệu. Bạn có thể thay đổi điều này theo cấu hình và thiết lập cơ sở dữ liệu của mình. Chúng tôi cũng đang giả định phiên bản hiện tại của trình điều khiển JDBCpostgresql-9.2-1002.jdbc3.jar có sẵn trong đường dẫn hiện tại.

C:\JavaPostgresIntegration>javac PostgreSQLJDBC.java
C:\JavaPostgresIntegration>java -cp c:\tools\postgresql-9.2-1002.jdbc3.jar;C:\JavaPostgresIntegration PostgreSQLJDBC
Open database successfully

Tạo bảng

Chương trình Java sau sẽ được sử dụng để tạo một bảng trong cơ sở dữ liệu đã mở trước đó. Đảm bảo rằng bạn chưa có bảng này trong cơ sở dữ liệu mục tiêu của mình.

import java.sql.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class PostgreSQLJDBC {
   public static void main( String args[] ) {
      Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "manisha", "123");
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         String sql = "CREATE TABLE COMPANY " +
            "(ID INT PRIMARY KEY     NOT NULL," +
            " NAME           TEXT    NOT NULL, " +
            " AGE            INT     NOT NULL, " +
            " ADDRESS        CHAR(50), " +
            " SALARY         REAL)";
         stmt.executeUpdate(sql);
         stmt.close();
         c.close();
      } catch ( Exception e ) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Table created successfully");
   }
}

Khi một chương trình được biên dịch và thực thi, nó sẽ tạo ra bảng COMPANY trong testdb cơ sở dữ liệu và sẽ hiển thị hai dòng sau:

Opened database successfully
Table created successfully

INSERT hoạt động

Chương trình Java sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class PostgreSQLJDBC {
   public static void main(String args[]) {
      Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "manisha", "123");
         c.setAutoCommit(false);
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
            + "VALUES (1, 'Paul', 32, 'California', 20000.00 );";
         stmt.executeUpdate(sql);

         sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
            + "VALUES (2, 'Allen', 25, 'Texas', 15000.00 );";
         stmt.executeUpdate(sql);

         sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
            + "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );";
         stmt.executeUpdate(sql);

         sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
            + "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
         stmt.executeUpdate(sql);

         stmt.close();
         c.commit();
         c.close();
      } catch (Exception e) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Records created successfully");
   }
}

Khi chương trình trên được biên dịch và thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

CHỌN hoạt động

Chương trình Java sau đây cho thấy cách chúng ta có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng ta được tạo trong ví dụ trên:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class PostgreSQLJDBC {
   public static void main( String args[] ) {
      Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "manisha", "123");
         c.setAutoCommit(false);
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
         while ( rs.next() ) {
            int id = rs.getInt("id");
            String  name = rs.getString("name");
            int age  = rs.getInt("age");
            String  address = rs.getString("address");
            float salary = rs.getFloat("salary");
            System.out.println( "ID = " + id );
            System.out.println( "NAME = " + name );
            System.out.println( "AGE = " + age );
            System.out.println( "ADDRESS = " + address );
            System.out.println( "SALARY = " + salary );
            System.out.println();
         }
         rs.close();
         stmt.close();
         c.close();
      } catch ( Exception e ) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Operation done successfully");
   }
}

Khi chương trình được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0

ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully

CẬP NHẬT Hoạt động

Đoạn mã Java sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class PostgreSQLJDBC {
   public static void main( String args[] ) {
      Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "manisha", "123");
         c.setAutoCommit(false);
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;";
         stmt.executeUpdate(sql);
         c.commit();

         ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
         while ( rs.next() ) {
            int id = rs.getInt("id");
            String  name = rs.getString("name");
            int age  = rs.getInt("age");
            String  address = rs.getString("address");
            float salary = rs.getFloat("salary");
            System.out.println( "ID = " + id );
            System.out.println( "NAME = " + name );
            System.out.println( "AGE = " + age );
            System.out.println( "ADDRESS = " + address );
            System.out.println( "SALARY = " + salary );
            System.out.println();
         }
         rs.close();
         stmt.close();
         c.close();
      } catch ( Exception e ) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Operation done successfully");
   }
}

Khi chương trình được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0

ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 25000.0

Operation done successfully

Thao tác DELETE

Đoạn mã Java sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class PostgreSQLJDBC6 {
   public static void main( String args[] ) {
      Connection c = null;
      Statement stmt = null;
      try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager
            .getConnection("jdbc:postgresql://localhost:5432/testdb",
            "manisha", "123");
         c.setAutoCommit(false);
         System.out.println("Opened database successfully");

         stmt = c.createStatement();
         String sql = "DELETE from COMPANY where ID = 2;";
         stmt.executeUpdate(sql);
         c.commit();

         ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" );
         while ( rs.next() ) {
            int id = rs.getInt("id");
            String  name = rs.getString("name");
            int age  = rs.getInt("age");
            String  address = rs.getString("address");
            float salary = rs.getFloat("salary");
            System.out.println( "ID = " + id );
            System.out.println( "NAME = " + name );
            System.out.println( "AGE = " + age );
            System.out.println( "ADDRESS = " + address );
            System.out.println( "SALARY = " + salary );
            System.out.println();
         }
         rs.close();
         stmt.close();
         c.close();
      } catch ( Exception e ) {
         System.err.println( e.getClass().getName()+": "+ e.getMessage() );
         System.exit(0);
      }
      System.out.println("Operation done successfully");
   }
}

Khi chương trình được biên dịch và thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0

ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 25000.0
Operation done successfully

Cài đặt

Phần mở rộng PostgreSQL được bật theo mặc định trong các phiên bản mới nhất của PHP 5.3.x. Có thể vô hiệu hóa nó bằng cách sử dụng--without-pgsqltại thời điểm biên dịch. Bạn vẫn có thể sử dụng lệnh yum để cài đặt giao diện PHP -PostgreSQL -

yum install php-pgsql

Trước khi bạn bắt đầu sử dụng giao diện PHP PostgreSQL, hãy tìm pg_hba.conf trong thư mục cài đặt PostgreSQL của bạn và thêm dòng sau:

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Bạn có thể khởi động / khởi động lại máy chủ postgres, trong trường hợp nó không chạy, bằng cách sử dụng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

Người dùng Windows phải bật php_pgsql.dll để sử dụng tiện ích mở rộng này. DLL này được bao gồm trong các bản phân phối Windows trong các bản phát hành mới nhất của PHP 5.3.x

Để biết hướng dẫn cài đặt chi tiết, vui lòng kiểm tra hướng dẫn PHP của chúng tôi và trang web chính thức của nó.

API giao diện PHP

Sau đây là các quy trình PHP quan trọng, có thể đáp ứng yêu cầu của bạn để làm việc với cơ sở dữ liệu PostgreSQL từ chương trình PHP của bạn. Nếu bạn đang tìm kiếm một ứng dụng phức tạp hơn, thì bạn có thể xem tài liệu chính thức của PHP.

S. Không. API & Mô tả
1

resource pg_connect ( string $connection_string [, int $connect_type ] )

Thao tác này sẽ mở ra một kết nối đến cơ sở dữ liệu PostgreSQL được chỉ định bởi connection_string.

Nếu PGSQL_CONNECT_FORCE_NEW được chuyển dưới dạng connect_type, thì một kết nối mới sẽ được tạo trong trường hợp cuộc gọi thứ hai tới pg_connect (), ngay cả khi connection_string giống hệt với kết nối hiện có.

2

bool pg_connection_reset ( resource $connection )

Quy trình này đặt lại kết nối. Nó rất hữu ích cho việc khôi phục lỗi. Trả về TRUE khi thành công hoặc FALSE nếu thất bại.

3

int pg_connection_status ( resource $connection )

Quy trình này trả về trạng thái của kết nối được chỉ định. Trả về PGSQL_CONNECTION_OK hoặc PGSQL_CONNECTION_BAD.

4

string pg_dbname ([ resource $connection ] )

Quy trình này trả về tên của cơ sở dữ liệu mà tài nguyên kết nối PostgreSQL đã cho.

5

resource pg_prepare ([ resource $connection ], string $stmtname, string $query )

Thao tác này sẽ gửi yêu cầu tạo một câu lệnh đã chuẩn bị sẵn với các tham số đã cho và chờ hoàn thành.

6

resource pg_execute ([ resource $connection ], string $stmtname, array $params )

Quy trình này sẽ gửi yêu cầu thực hiện một câu lệnh đã chuẩn bị sẵn với các tham số đã cho và chờ kết quả.

7

resource pg_query ([ resource $connection ], string $query )

Quy trình này thực hiện truy vấn trên kết nối cơ sở dữ liệu được chỉ định.

số 8

array pg_fetch_row ( resource $result [, int $row ] )

Quy trình này tìm nạp một hàng dữ liệu từ kết quả được liên kết với tài nguyên kết quả được chỉ định.

9

array pg_fetch_all ( resource $result )

Quy trình này trả về một mảng chứa tất cả các hàng (bản ghi) trong tài nguyên kết quả.

10

int pg_affected_rows ( resource $result )

Quy trình này trả về số lượng hàng bị ảnh hưởng bởi các truy vấn INSERT, UPDATE và DELETE.

11

int pg_num_rows ( resource $result )

Quy trình này trả về số hàng trong tài nguyên kết quả PostgreSQL, ví dụ số hàng được trả về bởi câu lệnh SELECT.

12

bool pg_close ([ resource $connection ] )

Quy trình này đóng kết nối không liên tục đến cơ sở dữ liệu PostgreSQL được liên kết với tài nguyên kết nối đã cho.

13

string pg_last_error ([ resource $connection ] )

Quy trình này trả về thông báo lỗi cuối cùng cho một kết nối nhất định.

14

string pg_escape_literal ([ resource $connection ], string $data )

Quy trình này thoát khỏi một ký tự để chèn vào trường văn bản.

15

string pg_escape_string ([ resource $connection ], string $data )

Quy trình này thoát khỏi một chuỗi để truy vấn cơ sở dữ liệu.

Kết nối với Cơ sở dữ liệu

Đoạn mã PHP sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có trên máy cục bộ và cuối cùng một đối tượng kết nối cơ sở dữ liệu sẽ được trả về.

<?php
   $host = "host = 127.0.0.1"; $port        = "port = 5432";
   $dbname = "dbname = testdb"; $credentials = "user = postgres password=pass123";

   $db = pg_connect( "$host $port $dbname $credentials" ); if(!$db) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }
?>

Bây giờ, chúng ta hãy chạy chương trình đã cho ở trên để mở cơ sở dữ liệu của chúng ta testdb: nếu cơ sở dữ liệu được mở thành công, thì nó sẽ đưa ra thông báo sau:

Opened database successfully

Tạo bảng

Chương trình PHP sau sẽ được sử dụng để tạo một bảng trong cơ sở dữ liệu đã tạo trước đó:

<?php
   $host = "host = 127.0.0.1"; $port        = "port = 5432";
   $dbname = "dbname = testdb"; $credentials = "user = postgres password=pass123";

   $db = pg_connect( "$host $port $dbname $credentials" ); if(!$db) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }
   
   $sql =<<<EOF CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL); EOF; $ret = pg_query($db, $sql);
   if(!$ret) { echo pg_last_error($db);
   } else {
      echo "Table created successfully\n";
   }
   pg_close($db);
?>

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra bảng COMPANY trong testdb và nó sẽ hiển thị các thông báo sau:

Opened database successfully
Table created successfully

INSERT hoạt động

Chương trình PHP sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

<?php
   $host        = "host=127.0.0.1";
   $port = "port=5432"; $dbname      = "dbname = testdb";
   $credentials = "user = postgres password=pass123"; $db = pg_connect( "$host $port $dbname $credentials"  );
   if(!$db) { echo "Error : Unable to open database\n"; } else { echo "Opened database successfully\n"; } $sql =<<<EOF
      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (1, 'Paul', 32, 'California', 20000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );

      INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );
EOF;

   $ret = pg_query($db, $sql); if(!$ret) {
      echo pg_last_error($db); } else { echo "Records created successfully\n"; } pg_close($db);
?>

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

CHỌN hoạt động

Chương trình PHP sau đây cho thấy cách chúng tôi có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng tôi được tạo trong ví dụ trên:

<?php
   $host = "host = 127.0.0.1"; $port        = "port = 5432";
   $dbname = "dbname = testdb"; $credentials = "user = postgres password=pass123";

   $db = pg_connect( "$host $port $dbname $credentials" ); if(!$db) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }

   $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = pg_query($db, $sql);
   if(!$ret) { echo pg_last_error($db);
      exit;
   } 
   while($row = pg_fetch_row($ret)) {
      echo "ID = ". $row[0] . "\n"; echo "NAME = ". $row[1] ."\n";
      echo "ADDRESS = ". $row[2] ."\n"; echo "SALARY = ".$row[4] ."\n\n";
   }
   echo "Operation done successfully\n";
   pg_close($db);
?>

Khi chương trình đã cho ở trên được thực thi, nó sẽ cho kết quả như sau. Lưu ý rằng các trường được trả về theo trình tự mà chúng đã được sử dụng trong khi tạo bảng.

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  20000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

CẬP NHẬT Hoạt động

Đoạn mã PHP sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

<?php
   $host        = "host=127.0.0.1";
   $port = "port=5432"; $dbname      = "dbname = testdb";
   $credentials = "user = postgres password=pass123"; $db = pg_connect( "$host $port $dbname $credentials"  );
   if(!$db) { echo "Error : Unable to open database\n"; } else { echo "Opened database successfully\n"; } $sql =<<<EOF
      UPDATE COMPANY set SALARY = 25000.00 where ID=1;
EOF;
   $ret = pg_query($db, $sql); if(!$ret) {
      echo pg_last_error($db); exit; } else { echo "Record updated successfully\n"; } $sql =<<<EOF
      SELECT * from COMPANY;
EOF;

   $ret = pg_query($db, $sql); if(!$ret) {
      echo pg_last_error($db); exit; } while($row = pg_fetch_row($ret)) { echo "ID = ". $row[0] . "\n";
      echo "NAME = ". $row[1] ."\n"; echo "ADDRESS = ". $row[2] ."\n";
      echo "SALARY =  ".$row[4] ."\n\n"; } echo "Operation done successfully\n"; pg_close($db);
?>

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Record updated successfully
ID = 2
NAME = Allen
ADDRESS = 25
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = 23
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = 25
SALARY =  65000

ID = 1
NAME = Paul
ADDRESS = 32
SALARY =  25000

Operation done successfully

Thao tác DELETE

Đoạn mã PHP sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

<?php
   $host = "host = 127.0.0.1"; $port        = "port = 5432";
   $dbname = "dbname = testdb"; $credentials = "user = postgres password=pass123";

   $db = pg_connect( "$host $port $dbname $credentials" ); if(!$db) {
      echo "Error : Unable to open database\n";
   } else {
      echo "Opened database successfully\n";
   }
   $sql =<<<EOF DELETE from COMPANY where ID=2; EOF; $ret = pg_query($db, $sql);
   if(!$ret) { echo pg_last_error($db);
      exit;
   } else {
      echo "Record deleted successfully\n";
   }
   
   $sql =<<<EOF SELECT * from COMPANY; EOF; $ret = pg_query($db, $sql);
   if(!$ret) { echo pg_last_error($db);
      exit;
   } 
   while($row = pg_fetch_row($ret)) {
      echo "ID = ". $row[0] . "\n"; echo "NAME = ". $row[1] ."\n";
      echo "ADDRESS = ". $row[2] ."\n"; echo "SALARY = ".$row[4] ."\n\n";
   }
   echo "Operation done successfully\n";
   pg_close($db);
?>

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Record deleted successfully
ID = 3
NAME = Teddy
ADDRESS = 23
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = 25
SALARY =  65000

ID = 1
NAME = Paul
ADDRESS = 32
SALARY =  25000

Operation done successfully

Cài đặt

PostgreSQL có thể được tích hợp với Perl bằng cách sử dụng mô-đun Perl DBI, đây là một mô-đun truy cập cơ sở dữ liệu cho ngôn ngữ lập trình Perl. Nó định nghĩa một tập hợp các phương thức, biến và quy ước cung cấp giao diện cơ sở dữ liệu chuẩn.

Dưới đây là các bước đơn giản để cài đặt mô-đun DBI trên máy Linux / Unix của bạn -

$ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
$ tar xvfz DBI-1.625.tar.gz $ cd DBI-1.625
$ perl Makefile.PL $ make
$ make install

Nếu bạn cần cài đặt trình điều khiển SQLite cho DBI, thì nó có thể được cài đặt như sau:

$ wget http://search.cpan.org/CPAN/authors/id/T/TU/TURNSTEP/DBD-Pg-2.19.3.tar.gz
$ tar xvfz DBD-Pg-2.19.3.tar.gz $ cd DBD-Pg-2.19.3
$ perl Makefile.PL $ make
$ make install

Trước khi bạn bắt đầu sử dụng giao diện Perl PostgreSQL, hãy tìm pg_hba.conf trong thư mục cài đặt PostgreSQL của bạn và thêm dòng sau:

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Bạn có thể khởi động / khởi động lại máy chủ postgres, trong trường hợp nó không chạy, bằng cách sử dụng lệnh sau:

[root@host]# service postgresql restart
Stopping postgresql service:                               [  OK  ]
Starting postgresql service:                               [  OK  ]

API giao diện DBI

Sau đây là các quy trình DBI quan trọng, có thể đáp ứng đủ yêu cầu của bạn để làm việc với cơ sở dữ liệu SQLite từ chương trình Perl của bạn. Nếu bạn đang tìm kiếm một ứng dụng phức tạp hơn, thì bạn có thể xem tài liệu chính thức của Perl DBI.

S. Không. API & Mô tả
1

DBI→connect($data_source, "userid", "password", \%attr)

Thiết lập kết nối cơ sở dữ liệu hoặc phiên, tới $ data_source được yêu cầu. Trả về một đối tượng xử lý cơ sở dữ liệu nếu kết nối thành công.

Datasource có dạng như sau: DBI:Pg:dbname=$database;host=127.0.0.1;port=5432 Pg là tên trình điều khiển PostgreSQL và testdb là tên của cơ sở dữ liệu.

2

$dbh→do($sql)

Quy trình này chuẩn bị và thực thi một câu lệnh SQL duy nhất. Trả về số lượng hàng bị ảnh hưởng hoặc hoàn tác do lỗi. Giá trị trả về -1 có nghĩa là số hàng không được biết, không áp dụng được hoặc không có sẵn. Ở đây $ dbh là một xử lý được trả về bởi lệnh gọi DBI → connect ().

3

$dbh→prepare($sql)

Quy trình này chuẩn bị một câu lệnh để thực thi sau bởi cơ sở dữ liệu và trả về một tham chiếu đến một đối tượng xử lý câu lệnh.

4

$sth→execute()

Quy trình này thực hiện bất kỳ quá trình xử lý nào cần thiết để thực hiện câu lệnh đã chuẩn bị. Một undef được trả về nếu một lỗi xảy ra. Thực thi thành công luôn trả về true bất kể số hàng bị ảnh hưởng. Đây$sth is a statement handle returned by $dbh → chuẩn bị cuộc gọi ($ sql).

5

$sth→fetchrow_array()

Quy trình này tìm nạp dòng dữ liệu tiếp theo và trả về nó dưới dạng danh sách chứa các giá trị trường. Các trường rỗng được trả về dưới dạng giá trị undef trong danh sách.

6

$DBI::err

Điều này tương đương với $ h → err, trong đó $h is any of the handle types like $dbh, $sth, or $drh. Điều này trả về mã lỗi công cụ cơ sở dữ liệu gốc từ phương thức trình điều khiển cuối cùng được gọi.

7

$DBI::errstr

Điều này tương đương với $ h → errstr, trong đó $h is any of the handle types like $dbh, $sth, or $drh. Điều này trả về thông báo lỗi công cụ cơ sở dữ liệu gốc từ phương thức DBI cuối cùng được gọi.

số 8

$dbh->disconnect()

Quy trình này đóng một kết nối cơ sở dữ liệu đã mở trước đó bằng cuộc gọi tới DBI → connect ().

Kết nối với Cơ sở dữ liệu

Mã Perl sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu không tồn tại, thì nó sẽ được tạo và cuối cùng một đối tượng cơ sở dữ liệu sẽ được trả về.

#!/usr/bin/perl

use DBI;
use strict;

my $driver  = "Pg"; 
my $database = "testdb"; my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres"; my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) 
   or die $DBI::errstr;

print "Opened database successfully\n";

Bây giờ, chúng ta hãy chạy chương trình đã cho ở trên để mở cơ sở dữ liệu của chúng ta testdb; nếu cơ sở dữ liệu được mở thành công thì nó sẽ đưa ra thông báo sau:

Open database successfully

Tạo bảng

Chương trình Perl sau sẽ được sử dụng để tạo bảng trong cơ sở dữ liệu đã tạo trước đó:

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb"; my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = "postgres"; my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(CREATE TABLE COMPANY
      (ID INT PRIMARY KEY     NOT NULL,
      NAME           TEXT    NOT NULL,
      AGE            INT     NOT NULL,
      ADDRESS        CHAR(50),
      SALARY         REAL););
my $rv = $dbh->do($stmt); if($rv < 0) {
   print $DBI::errstr; } else { print "Table created successfully\n"; } $dbh->disconnect();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra bảng COMPANY trong testdb và nó sẽ hiển thị các thông báo sau:

Opened database successfully
Table created successfully

INSERT hoạt động

Chương trình Perl sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

#!/usr/bin/perl

use DBI;
use strict;

my $driver = "Pg"; my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432"; my $userid = "postgres";
my $password = "pass123"; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 )); my $rv = $dbh->do($stmt) or die $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (2, 'Allen', 25, 'Texas', 15000.00 ));
$rv = $dbh->do($stmt) or die $DBI::errstr;

$stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )); $rv = $dbh->do($stmt) or die $DBI::errstr; $stmt = qq(INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
   VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ););
$rv = $dbh->do($stmt) or die $DBI::errstr;

print "Records created successfully\n";
$dbh->disconnect();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

CHỌN hoạt động

Chương trình Perl sau đây cho thấy cách chúng tôi có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng tôi được tạo trong ví dụ trên:

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb"; my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres"; my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt ); my $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) { print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) { print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n"; print "ADDRESS = ". $row[2] ."\n";
      print "SALARY =  ". $row[3] ."\n\n"; } print "Operation done successfully\n"; $dbh->disconnect();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  20000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

CẬP NHẬT Hoạt động

Mã Perl sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

#!/usr/bin/perl

use DBI;
use strict;

my $driver = "Pg"; my $database = "testdb";
my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432"; my $userid = "postgres";
my $password = "pass123"; my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die $DBI::errstr;
print "Opened database successfully\n";

my $stmt = qq(UPDATE COMPANY set SALARY = 25000.00 where ID=1;); my $rv = $dbh->do($stmt) or die $DBI::errstr; if( $rv < 0 ) {
   print $DBI::errstr; }else{ print "Total number of rows updated : $rv\n";
}
$stmt = qq(SELECT id, name, address, salary from COMPANY;); my $sth = $dbh->prepare( $stmt );
$rv = $sth->execute() or die $DBI::errstr; if($rv < 0) {
   print $DBI::errstr; } while(my @row = $sth->fetchrow_array()) {
      print "ID = ". $row[0] . "\n"; print "NAME = ". $row[1] ."\n";
      print "ADDRESS = ". $row[2] ."\n"; print "SALARY = ". $row[3] ."\n\n";
}
print "Operation done successfully\n";
$dbh->disconnect();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY =  15000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

Thao tác DELETE

Mã Perl sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

#!/usr/bin/perl

use DBI;
use strict;

my $driver   = "Pg"; 
my $database = "testdb"; my $dsn = "DBI:$driver:dbname = $database;host = 127.0.0.1;port = 5432";
my $userid = "postgres"; my $password = "pass123";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
   or die $DBI::errstr; print "Opened database successfully\n"; my $stmt = qq(DELETE from COMPANY where ID=2;);
my $rv = $dbh->do($stmt) or die $DBI::errstr;
if( $rv < 0 ) { print $DBI::errstr;
} else{
   print "Total number of rows deleted : $rv\n"; } $stmt = qq(SELECT id, name, address, salary  from COMPANY;);
my $sth = $dbh->prepare( $stmt ); $rv = $sth->execute() or die $DBI::errstr;
if($rv < 0) { print $DBI::errstr;
}
while(my @row = $sth->fetchrow_array()) { print "ID = ". $row[0] . "\n";
      print "NAME = ". $row[1] ."\n"; print "ADDRESS = ". $row[2] ."\n";
      print "SALARY =  ". $row[3] ."\n\n"; } print "Operation done successfully\n"; $dbh->disconnect();

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY =  25000

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY =  20000

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY =  65000

Operation done successfully

Cài đặt

PostgreSQL có thể được tích hợp với Python bằng mô-đun psycopg2. sycopg2 là một bộ điều hợp cơ sở dữ liệu PostgreSQL cho ngôn ngữ lập trình Python. psycopg2 được viết với mục đích rất nhỏ và nhanh, ổn định như một tảng đá. Bạn không cần phải cài đặt riêng mô-đun này vì nó được vận chuyển, theo mặc định, cùng với phiên bản Python 2.5.x trở đi.

Nếu bạn chưa cài đặt nó trên máy của mình thì bạn có thể sử dụng lệnh yum để cài đặt nó như sau:

$yum install python-psycopg2

Để sử dụng mô-đun psycopg2, trước tiên bạn phải tạo một đối tượng Kết nối đại diện cho cơ sở dữ liệu và sau đó tùy ý bạn có thể tạo đối tượng con trỏ sẽ giúp bạn thực thi tất cả các câu lệnh SQL.

API mô-đun psycopg2 của Python

Sau đây là các quy trình mô-đun psycopg2 quan trọng, có thể đáp ứng yêu cầu của bạn để làm việc với cơ sở dữ liệu PostgreSQL từ chương trình Python của bạn. Nếu bạn đang tìm kiếm một ứng dụng phức tạp hơn, thì bạn có thể xem tài liệu chính thức của mô-đun Python psycopg2.

S. Không. API & Mô tả
1

psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432")

API này mở kết nối đến cơ sở dữ liệu PostgreSQL. Nếu cơ sở dữ liệu được mở thành công, nó sẽ trả về một đối tượng kết nối.

2

connection.cursor()

Quy trình này tạo ra một cursor sẽ được sử dụng trong suốt quá trình lập trình cơ sở dữ liệu của bạn với Python.

3

cursor.execute(sql [, optional parameters])

Quy trình này thực thi một câu lệnh SQL. Câu lệnh SQL có thể được tham số hóa (tức là trình giữ chỗ thay vì các ký tự SQL). Mô-đun psycopg2 hỗ trợ trình giữ chỗ sử dụng ký hiệu% s

Ví dụ: cursor.execute ("chèn vào người các giá trị (% s,% s)", (ai, tuổi))

4

cursor.executemany(sql, seq_of_parameters)

Quy trình này thực thi một lệnh SQL chống lại tất cả các chuỗi tham số hoặc ánh xạ được tìm thấy trong chuỗi sql.

5

cursor.callproc(procname[, parameters])

Quy trình này thực hiện một thủ tục cơ sở dữ liệu được lưu trữ với tên đã cho. Chuỗi tham số phải chứa một mục nhập cho mỗi đối số mà thủ tục mong đợi.

6

cursor.rowcount

Thuộc tính chỉ đọc này trả về tổng số hàng cơ sở dữ liệu đã được sửa đổi, chèn hoặc xóa bởi lần thực thi cuối cùng * ().

7

connection.commit()

Phương thức này cam kết giao dịch hiện tại. Nếu bạn không gọi phương thức này, bất kỳ điều gì bạn đã làm kể từ lần gọi cuối cùng tới commit () sẽ không hiển thị từ các kết nối cơ sở dữ liệu khác.

số 8

connection.rollback()

Phương thức này sẽ quay trở lại bất kỳ thay đổi nào đối với cơ sở dữ liệu kể từ lần gọi cuối cùng tới commit ().

9

connection.close()

Phương thức này đóng kết nối cơ sở dữ liệu. Lưu ý rằng điều này không tự động gọi commit (). Nếu bạn chỉ đóng kết nối cơ sở dữ liệu của mình mà không gọi commit () trước, các thay đổi của bạn sẽ bị mất!

10

cursor.fetchone()

Phương thức này tìm nạp hàng tiếp theo của tập hợp kết quả truy vấn, trả về một chuỗi duy nhất hoặc Không có khi không có thêm dữ liệu.

11

cursor.fetchmany([size=cursor.arraysize])

Quy trình này tìm nạp tập hợp các hàng tiếp theo của kết quả truy vấn, trả về một danh sách. Một danh sách trống được trả về khi không còn hàng nào nữa. Phương thức cố gắng tìm nạp nhiều hàng như được chỉ ra bởi tham số kích thước.

12

cursor.fetchall()

Quy trình này tìm nạp tất cả (còn lại) các hàng của kết quả truy vấn, trả về một danh sách. Một danh sách trống được trả về khi không có hàng nào.

Kết nối với Cơ sở dữ liệu

Đoạn mã Python sau đây cho thấy cách kết nối với cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu không tồn tại, thì nó sẽ được tạo và cuối cùng một đối tượng cơ sở dữ liệu sẽ được trả về.

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")

print "Opened database successfully"

Tại đây, bạn cũng có thể cung cấp cơ sở dữ liệu testdb như tên và nếu cơ sở dữ liệu được mở thành công, thì nó sẽ đưa ra thông báo sau:

Open database successfully

Tạo bảng

Chương trình Python sau sẽ được sử dụng để tạo bảng trong cơ sở dữ liệu đã tạo trước đó:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"

cur = conn.cursor()
cur.execute('''CREATE TABLE COMPANY
      (ID INT PRIMARY KEY     NOT NULL,
      NAME           TEXT    NOT NULL,
      AGE            INT     NOT NULL,
      ADDRESS        CHAR(50),
      SALARY         REAL);''')
print "Table created successfully"

conn.commit()
conn.close()

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra bảng COMPANY trong test.db và nó sẽ hiển thị các thông báo sau:

Opened database successfully
Table created successfully

INSERT hoạt động

Chương trình Python sau đây cho thấy cách chúng ta có thể tạo các bản ghi trong bảng COMPANY của chúng ta được tạo trong ví dụ trên:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print "Records created successfully";
conn.close()

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

CHỌN hoạt động

Chương trình Python sau đây cho thấy cách chúng ta có thể tìm nạp và hiển thị các bản ghi từ bảng COMPANY của chúng ta được tạo trong ví dụ trên:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

CẬP NHẬT Hoạt động

Đoạn mã Python sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY của chúng ta -

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit()
print "Total number of rows updated :", cur.rowcount

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Total number of rows updated : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  25000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

Thao tác DELETE

Đoạn mã Python sau đây cho thấy cách chúng ta có thể sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY của chúng ta -

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", cur.rowcount

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Khi chương trình đã cho ở trên được thực thi, nó sẽ tạo ra kết quả sau:

Opened database successfully
Total number of rows deleted : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully