Hướng dẫn nodejs connect postgresql - nodejs kết nối postgresql

  • Giới thiệu
  • PostgreSQL
  • Cấu hình dự án
  • Thực hiện các hoạt động CRUD
    • Cấu hình cơ sở dữ liệu
    • Kết nối với Cơ sở dữ liệu
    • Tạo bảng
    • Tạo / Chèn dữ liệu
    • Lấy / Chọn dữ liệu
    • Cập nhật dữ liệu
    • Xóa dữ liệu
  • Gộp chung
    • Tạo một nhóm
  • Sử dụng con trỏ để đọc các truy vấn lớn
  • Sự kết luận

Giới thiệu

Trong bài viết này, chúng tôi sẽ thảo luận về cách tích hợp PostgreSQL với Node.js.

Để làm theo bài viết này tốt hơn, chúng tôi khuyên bạn nên có kinh nghiệm sử dụng Node.js và câu lệnh SQL trước đó. Chúng tôi sẽ sử dụng cú pháp javascript ES6 đơn giản trong bài viết này.

Có một số ứng dụng khách khác nhau mà bạn có thể sử dụng để tích hợp PostgreSQL với Node.js. Trong bài viết này, chúng tôi sẽ sử dụng node-postgres. Nó là một mô-đun phổ biến và trưởng thành so với các ứng dụng khách PostgreSQL khác.node-postgres. Nó là một mô-đun phổ biến và trưởng thành so với các ứng dụng khách PostgreSQL khác.

Ngoài ra, bạn có thể sử dụng PostgreSQL với ORM chẳng hạn như Trình tự cũng. Nhưng chúng tôi sẽ không sử dụng mô-đun ORM như vậy trong bài viết này. Thay vào đó, chúng tôi sẽ sử dụng các truy vấn SQL thuần túy, sau đó bạn có thể xây dựng các truy vấn này cho các tương tác cơ sở dữ liệu phức tạp hơn.

PostgreSQL

Cấu hình dự án

Thực hiện các hoạt động CRUD

Cấu hình cơ sở dữ liệu

Cấu hình dự án

Thực hiện các hoạt động CRUD

$ npm init -y

Cấu hình cơ sở dữ liệunpm để cài đặt node-postgressẽ được sử dụng để kết nối và tương tác với Postgres:

$ npm install --save pg

Thực hiện các hoạt động CRUD

Cấu hình cơ sở dữ liệu

Cấu hình cơ sở dữ liệu

Kết nối với Cơ sở dữ liệu

Tạo bảngpsql sẽ nhập CLI. PostgreSQL sẽ tạo một người dùng được gọi là postgres để truy cập cơ sở dữ liệu trong các nền tảng dựa trên Linux. Do đó, chúng ta có thể sử dụng lệnh sau để đăng nhập với tư cách là postgres:

$ sudo -i -u postgres

Tạo / Chèn dữ liệu

$ psql

Lấy / Chọn dữ liệu

Cập nhật dữ liệulist hoặc l:

Xóa dữ liệu

CREATE DATABASE testdb;

Gộp chungtestdb cơ sở dữ liệu và chào đón bằng đầu ra, xác nhận lệnh của chúng tôi:

CREATE DATABASE

Tạo một nhómpostgres, mật khẩu không được đặt theo mặc định. Nếu bạn muốn đặt mật khẩu của mình (thay vì để trống), hãy sử dụng password:

Sử dụng con trỏ để đọc các truy vấn lớn

Kết nối với Cơ sở dữ liệu

Tạo bảngnode-postgres. Một trong những tùy chọn là sử dụng một ứng dụng khách. Phương pháp khác là sử dụng một nhóm kết nối. Tuy nhiên, nếu ứng dụng của bạn sử dụng cơ sở dữ liệu thường xuyên, pool sẽ là một lựa chọn tốt hơn so với việc sử dụng một ứng dụng khách.

Tạo / Chèn dữ liệunode-postgres có thể được thực hiện theo hai cách – sử dụng khách hàng duy nhất và sử dụng một nhóm kết nối.

Lấy / Chọn dữ liệu

const { Client } = require('pg');

const client = new Client({
    user: 'postgres',
    host: 'localhost',
    database: 'testdb',
    password: '1234abcd',
    port: 5432,
});

client.connect();

Cập nhật dữ liệu

Xóa dữ liệu

Gộp chung

PGUSER=dbuser
PGHOST=database.server.com
PGPASSWORD=secretpassword
PGDATABASE=mydb
PGPORT=3211

Tạo một nhóm

PGHOST='localhost'
PGUSER=process.env.USER
PGDATABASE=process.env.USER
PGPASSWORD=null
PGPORT=5432

Sử dụng con trỏ để đọc các truy vấn lớnprocess.env.USER sẽ giữ giá trị cho người dùng hiện tại đã đăng nhập.

Tạo bảng

Với cơ sở dữ liệu được chuẩn bị sẵn để chèn dữ liệu, hãy tạo một số bảng để lưu trữ dữ liệu của chúng ta. Giống như với tất cả các cơ sở dữ liệu dựa trên SQL, chúng ta sẽ sử dụng CREATE TABLEry:CREATE TABLEry:

$ npm install --save pg
0

Một bảng bao gồm cộtvà mỗi cột có một kiểu dữ liệu. Ví dụ, một firstName sẽ có varchar là kiểu dữ liệu, đại diện cho một Chuỗi có kích thước thay đổi.firstName sẽ có varchar là kiểu dữ liệu, đại diện cho một Chuỗi có kích thước thay đổi.

Nếu bạn muốn đọc thêm về các loại dữ liệu được hỗ trợ, Tài liệu PostgreSQL liệt kê chúng một cách độc đáo.

Điều đó đang được nói, chúng ta có thể sử dụng truy vấn này để tạo một bảng trong cơ sở dữ liệu:

$ npm install --save pg
1

Để thực sự chạy truy vấn này dựa trên cơ sở dữ liệu, chúng tôi sử dụng query() từ client chúng tôi đã thiết lập trước đây:query() từ client chúng tôi đã thiết lập trước đây:

$ npm install --save pg
2

Ghi chú: Đừng quên end() kết nối của bạn với máy khách sau khi bạn đã chạy truy vấn. Đừng quên end() kết nối của bạn với máy khách sau khi bạn đã chạy truy vấn.

Chạy mã này sẽ tạo bảng của chúng tôi và in ra:

$ npm install --save pg
3

Điều này cũng có thể đạt được bằng cách sử dụng các lời hứa và async/await. Vì một cuộc gọi cơ sở dữ liệu có thể không thành công, nên sẽ hợp lý hơn khi sử dụng các lời hứa:async/await. Vì một cuộc gọi cơ sở dữ liệu có thể không thành công, nên sẽ hợp lý hơn khi sử dụng các lời hứa:

$ npm install --save pg
4

Như bạn có thể thấy trong ví dụ, chúng ta có thể sử dụng khối cuối cùng để đóng kết nối với cơ sở dữ liệu. Vì vậy, ngay cả khi truy vấn ném một errKết nối sẽ được đóng lại.errKết nối sẽ được đóng lại.

Ngoài ra, chúng ta có thể sử dụng async/await cú pháp nữa:async/await cú pháp nữa:

$ npm install --save pg
5

Tất cả các cách tiếp cận này sẽ mang lại cùng một kết quả:

$ npm install --save pg
3

Để xác minh điều này, hãy sử dụng psql giao diện dòng để kiểm tra DB. Mở một thiết bị đầu cuối, bắt đầu trình bao bằng psqlvà chọn cơ sở dữ liệu bằng cách sử dụng c [database]. c là viết tắt của connect:psql giao diện dòng để kiểm tra DB. Mở một thiết bị đầu cuối, bắt đầu trình bao bằng psqlvà chọn cơ sở dữ liệu bằng cách sử dụng c [database]. c là viết tắt của connect:

$ npm install --save pg
7

Sau đó, bạn có thể liệt kê các bảng trong cơ sở dữ liệu testdb bằng cách chạy dt:testdb bằng cách chạy dt:

Bạn cũng có thể truy vấn các bảng cụ thể bằng cách cung cấp tên của chúng:

$ npm install --save pg
8

Truy vấn này sẽ hiển thị bảng có tên FOO.FOO.

Tạo / Chèn dữ liệu

Chúng ta có thể sử dụng SQL INSERT INTO câu lệnh để chèn dữ liệu vào bảng:INSERT INTO câu lệnh để chèn dữ liệu vào bảng:

$ npm install --save pg
9

Để làm cho truy vấn này trở nên cụ thể, hãy chèn các giá trị của riêng chúng ta và tạo một truy vấn:

$ sudo -i -u postgres
0

Và cuối cùng, hãy chạy truy vấn đối với cơ sở dữ liệu:

$ sudo -i -u postgres
1

Ghi chú: Giống như lần trước, hàm này có thể được viết bằng cách sử dụng async/await cú pháp. Các ví dụ bổ sung này được bỏ qua cho ngắn gọn. Giống như lần trước, hàm này có thể được viết bằng cách sử dụng async/await cú pháp. Các ví dụ bổ sung này được bỏ qua cho ngắn gọn.

Chạy mã này sẽ chèn một người dùng vào cơ sở dữ liệu của chúng tôi và in ra:

$ sudo -i -u postgres
2

Để xác minh điều này, trong testdb cơ sở dữ liệu, chạy SELECT bản tường trình:testdb cơ sở dữ liệu, chạy SELECT bản tường trình:

$ sudo -i -u postgres
3

Rõ ràng chúng ta có thể thấy rằng người dùng đã thực sự được tạo thành công:

Lấy / Chọn dữ liệu

Để truy xuất dữ liệu từ cơ sở dữ liệu, SELECT câu lệnh được sử dụng:SELECT câu lệnh được sử dụng:

$ sudo -i -u postgres
4

Bạn có thể chọn các cột cụ thể bằng cách chỉ định chúng hoặc chọn tất cả các trường của bảng bằng cách sử dụng * ký tự đại diện. Theo tùy chọn, bạn có thể sáng tạo với nhiều điều kiện hơn bằng cách sử dụng WHERE bản tường trình.* ký tự đại diện. Theo tùy chọn, bạn có thể sáng tạo với nhiều điều kiện hơn bằng cách sử dụng WHERE bản tường trình.

Ở đây, chúng tôi chọn tất cả các hàng và tất cả các cột từ users cơ sở dữ liệu:users cơ sở dữ liệu:

$ sudo -i -u postgres
5

Bây giờ, để chạy truy vấn này với cơ sở dữ liệu, chúng ta sẽ sử dụng client:client:

$ sudo -i -u postgres
6

Chạy mã này sẽ mang lại:

$ sudo -i -u postgres
7

Truy vấn này trả về tất cả các người dùng được thêm vào cơ sở dữ liệu. Bạn cũng có thể lọc người dùng theo trường của họ.

Ví dụ: nếu chúng tôi muốn trả lại tất cả người dùng dưới 30 tuổi, chúng tôi sẽ thêm WHERE mệnh đề:WHERE mệnh đề:

$ sudo -i -u postgres
8

Và sau đó, chúng tôi sẽ chạy nó trên cơ sở dữ liệu:

$ sudo -i -u postgres
6

Chạy mã này sẽ mang lại:

$ psql
0

Truy vấn này trả về tất cả các người dùng được thêm vào cơ sở dữ liệu. Bạn cũng có thể lọc người dùng theo trường của họ.

Ví dụ: nếu chúng tôi muốn trả lại tất cả người dùng dưới 30 tuổi, chúng tôi sẽ thêm WHERE mệnh đề:UPDATE bản tường trình:

$ psql
1

Và sau đó, chúng tôi sẽ chạy nó trên cơ sở dữ liệu:SET. Sau WHERE bạn có thể xác định điều kiện mà các mục nhập cần được cập nhật.

Cập nhật dữ liệu

$ psql
2

Để cập nhật dữ liệu đã tồn tại, chúng tôi có thể sử dụng UPDATE bản tường trình:

$ psql
3

Bạn có thể đặt từng giá trị cập nhật cho từng cột với SET. Sau WHERE bạn có thể xác định điều kiện mà các mục nhập cần được cập nhật.WHERE mệnh đề và in ra:

$ psql
4

Hãy điền truy vấn của chúng tôi:

Bây giờ, hãy chạy truy vấn đối với cơ sở dữ liệu:

Chạy đoạn mã này sẽ cập nhật các mục nhập đáp ứng WHERE mệnh đề và in ra:DELETE bản tường trình:

$ psql
5

Để xác minh, hãy kiểm tra cơ sở dữ liệu của chúng tôi:

Cập nhật dữ liệu

$ psql
6

Để cập nhật dữ liệu đã tồn tại, chúng tôi có thể sử dụng UPDATE bản tường trình:

$ psql
7

Bạn có thể đặt từng giá trị cập nhật cho từng cột với SET. Sau WHERE bạn có thể xác định điều kiện mà các mục nhập cần được cập nhật.WHERE mệnh đề và in ra:

$ psql
8

Hãy điền truy vấn của chúng tôi:

Bây giờ, hãy chạy truy vấn đối với cơ sở dữ liệu:

Chạy đoạn mã này sẽ cập nhật các mục nhập đáp ứng WHERE mệnh đề và in ra:

Để xác minh, hãy kiểm tra cơ sở dữ liệu của chúng tôi:

Ngoài ra, máy chủ PostgreSQL chỉ có thể xử lý một số lượng hạn chế máy khách tại một thời điểm nhất định, điều này sẽ phụ thuộc vào bộ nhớ máy chủ của bạn. Vì vậy, nếu 100 truy vấn diễn ra trong một giây – giới hạn này có thể làm hỏng máy chủ của bạn.

Ngoài ra, ứng dụng khách chỉ có thể xử lý một yêu cầu tại một thời điểm cho một kết nối duy nhất, điều này làm chậm mọi thứ hơn.

Trong tình huống như thế này, bạn có thể sử dụng pg-pool để giải quyết điều đó.pg-pool để giải quyết điều đó.

Tạo một nhóm

Đầu tiên nhập Pool Lớp học từ pg:Pool Lớp học từ pg:

$ psql
9

Sau đó, hãy tạo một đối tượng pool mới:

CREATE DATABASE testdb;
0

Nếu bạn không định cấu hình tên người dùng, máy chủ lưu trữ và các thuộc tính khác, bạn phải xác định các biến môi trường cho các biến này trong tệp cấu hình. Nó khá giống như khi cấu hình một ứng dụng khách.

Tiếp theo, hãy xác định một trình xử lý lỗi cho nhóm. Nếu có bất kỳ lỗi nào xảy ra từ nhóm, lệnh gọi lại trong sự kiện này sẽ được kích hoạt:

CREATE DATABASE testdb;
1

Điều này bao gồm chúng tôi trong trường hợp có lỗi mạng.

Sau đó, sử dụng poolchúng tôi kết nối với cơ sở dữ liệu và sử dụng client trong nhóm đó để thực hiện một truy vấn:poolchúng tôi kết nối với cơ sở dữ liệu và sử dụng client trong nhóm đó để thực hiện một truy vấn:

CREATE DATABASE testdb;
2

Điều này sẽ mang lại:

CREATE DATABASE testdb;
3

Một lần nữa, sẽ hợp lý hơn khi sử dụng các lời hứa trong trường hợp này:

CREATE DATABASE testdb;
4

Hoặc thậm chí async/await cú pháp:async/await cú pháp:

CREATE DATABASE testdb;
5

Sử dụng con trỏ để đọc các truy vấn lớn

Thông thường, dữ liệu nhận được từ một truy vấn được tải thẳng vào bộ nhớ. Tập dữ liệu càng lớn thì mức sử dụng bộ nhớ càng cao.

Vì vậy, khi bạn đang cố gắng truy vấn một tập dữ liệu lớn có thể chứa hàng nghìn bản ghi – việc tải tất cả vào bộ nhớ rất kém hiệu quả và đôi khi, điều đó rõ ràng là không thể. Con trỏ có thể giúp bạn trong trường hợp như thế này bằng cách truy xuất một số bản ghi giới hạn tại một thời điểm.

Theo một nghĩa nào đó, sử dụng con trỏ tương tự như truyền dữ liệu trực tuyến vì bạn sẽ truy cập nó tuần tự trong các khối nhỏ hơn. Để sử dụng con trỏ, chúng ta phải cài đặt pg-cursor Đầu tiên:pg-cursor Đầu tiên:

CREATE DATABASE testdb;
6

Chúng tôi sẽ vượt qua một new Cursor đến query(). Các cursor sẽ không thực sự truy xuất bất kỳ thông tin nào cho đến khi chúng tôi chỉ định giới hạn bằng cách sử dụng read() phương pháp:new Cursor đến query(). Các cursor sẽ không thực sự truy xuất bất kỳ thông tin nào cho đến khi chúng tôi chỉ định giới hạn bằng cách sử dụng read() phương pháp:

CREATE DATABASE testdb;
7

Các cursor‘S read() phương thức cho phép chúng tôi xác định có bao nhiêu hàng mà chúng tôi muốn truy xuất từ ​​hiện tại cursor ví dụ. Trong ví dụ này để đơn giản, chúng tôi đã giới hạn các hàng cho một bản ghi. Sau đó, chúng tôi đã đọc một tập hợp các hàng khác sau đó.cursor‘S read() phương thức cho phép chúng tôi xác định có bao nhiêu hàng mà chúng tôi muốn truy xuất từ ​​hiện tại cursor ví dụ. Trong ví dụ này để đơn giản, chúng tôi đã giới hạn các hàng cho một bản ghi. Sau đó, chúng tôi đã đọc một tập hợp các hàng khác sau đó.

Nếu bạn đã đến cuối các hàng trong cơ sở dữ liệu, rows mảng sẽ có chiều dài 0.rows mảng sẽ có chiều dài 0.

Sự kết luận

PostgreSQL là một cơ sở dữ liệu quan hệ nguồn mở, miễn phí, thực sự phổ biến. Các node-postgres là một mô-đun trưởng thành và được sử dụng rộng rãi làm cầu nối giữa Node.js với PostgreSQL.node-postgres là một mô-đun trưởng thành và được sử dụng rộng rãi làm cầu nối giữa Node.js với PostgreSQL.

Trong bài viết này, chúng tôi đã thiết lập cơ sở dữ liệu PostgreSQL và phát triển chức năng CRUD cơ bản thông qua một tập lệnh Node.js đơn giản. Sau đó, chúng tôi đã khám phá hỗ trợ gộp và việc sử dụng con trỏ để giới hạn dữ liệu được truy xuất.

Như mọi khi, mã nguồn có sẵn trên GitHub.