Top 5 lỗi thường gặp khi làm việc với PostgreSQL

3 min read

Trong quá trình làm việc, tester có thể sẽ phải thao tác trực tiếp trong DB (viết tắt của từ database – cơ sở dữ liệu). Rất nhiều tester gặp khó khăn trong quá trình làm việc với các DBMS (viết tắt của cụm từ DB Management System – hệ quản trị cơ sở dữ liệu) vì chúng có cách xử lý khác nhau cho một số câu lệnh.

Ví dụ với “SELECT TOP” (dùng khi muốn trả về một số lượng kết quả cụ thể – nếu có) thì nó hoạt động khác nhau trên các DBMS sau:

SQL SERVER: SELECT TOP 3 * FROM [Tên Cột]
MySQL: SELECT * FROM [Tên Cột] LIMIT 3;
Oracle: SELECT * FROM [Tên Cột] WHERE ROWNUM <= 3;

Mỗi DBMS sẽ có các lỗi thường gặp khác nhau, tuy nhiên trong bài viết này mình sẽ giới thiệu 5 lỗi thường gặp nhất khi làm việc với PostgreSQL.

Lỗi 1: Không tìm thấy table
Thông báo sau khi chạy câu lệnh truy vấn

ERROR: relation “customers” does not exist

Image description

Cách khắc phục và lưu ý

  1. Nên kéo table (ở danh sách bên trái) và thả vào khu vực Query Tool (bên phải)
  2. Hoặc tự gõ và kiểm tra tên cột đúng chính tả và PHÂN BIỆT HOA THƯỜNG. Trong ví dụ trên “customers” khác với “Customers”

Lỗi 2: Không rào tên column

Thông báo sau khi chạy câu lệnh truy vấn

ERROR: column “OrderId” does not exist

Cách khắc phục và lưu ý

Một số hệ quản trị cơ sở dữ liệu (DBMS) như MS SQL Server, thì chúng ta không cần phải rào tên cột khi viết câu truy vấn SQL. Tuy nhiên, với Postgres, thì trong câu truy vấn, bạn phải sử dụng dấu nháy kép để rào tên cột (column name).

Trong ví dụ này, chúng ta “quên” rào cột CustomerID.

Image description

Lỗi 3: Postgres phân biệt hoa thường cho tên cột và bảng

Câu lệnh này thông báo tương tự như tên cột không tồn tại ở Lỗi 2. Là không tìm thấy cột [Tên cột].

Thông báo sau khi chạy câu lệnh truy vấn

ERROR: column “OrderId” does not exist

Image description

Cách khắc phục và lưu ý

Cần xem lại cẩn thận, khi viết tên bảng (table name) và cột (column name) cho đúng theo hoa thường của nó là được. Bạn cần xem lại tên cột trong table cần làm việc nha. Thường nó nằm bên tay trái

Ví dụ bên trái bạn sẽ thấy danh sách các tables và columns tương ứng của nó khi expand (mở rộng nó ra).

Image description

Lỗi 4: Không “group by” thông tin được chọn

Khi bạn chọn thông tin như chọn [tên cột], hoặc đếm/tính trung bình,… thông tin gì đó ở phần SELECT mà bạn không liệt kê chúng vào phần group by thì khi chạy sẽ gặp lỗi này.

Thông báo sau khi chạy câu lệnh truy vấn

ERROR: syntax error at or near “GROUP”

Image description

Cách khắc phục và lưu ý

Khi bạn liệt kê [tên cột] nào ở phần SELECT thì nó cũng phải được liệt kê ở phần GROUP BY

Lỗi 5: Không chỉ định rõ table cho cột cần thao tác

Lỗi này chỉ xảy ra khi thao tác với nhiều bảng (table). Do lúc đó có khả năng 1 tên cột nào đó như “OrderId” sẽ xuất hiện ở nhiều bảng khác nhau, trong cả bảng Orders và bảng OrderDetails thì khi đó chương trình sẽ không hiểu là nên lấy OrderId trong bảng nào (dù nó là tương tự nhau) nên mình cần phải khai báo tường minh rõ ràng chỗ này.

Image description

Cách khắc phục và lưu ý

Khi bạn select dữ liệu từ 1 table thì sẽ không gặp lỗi này. Trong trường hợp này thì bạn cần khai báo tường minh tên table và tên cột theo cú pháp [Tên table].[Tên cột]

Để ngắn gọn thì bạn nên sử dụng alias, ví dụ:

Không dùng alias:

SELECT Customers.CustomerID, Customers.CustomerName FROM Customers;

Dùng alias:

SELECT cus.CustomerID, cus.CustomerName FROM Customers cus;

Một số lỗi trên không chỉ xảy ra đối với PostgreSQL mà còn có thể xảy ra với các BDMS khác như Oracle, MySQL, MS SQL Server, v.v… Khi làm việc với database các bạn thuộc lòng 5 lỗi trên là có thể giảm bớt 50% nguyên nhân gây ra stress rồi nhé.

Avatar photo

BigQuery vs Google Cloud SQL – P2

Ở bài viết trước tôi đã tổng quan về khái niệm, các tính năng chính và so sánh sự khác biệt chính của GCP...
Avatar photo Toai Nguyen Cong
11 min read

BigQuery vs Google Cloud SQL – P1

Trong bối cảnh điện toán đám mây không ngừng phát triển, các doanh nghiệp bị ngập trong các lựa chọn khi nói đến việc...
Avatar photo Toai Nguyen Cong
5 min read

Leave a Reply

Your email address will not be published. Required fields are marked *