PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

pghoard Alternatives - Quản lý sao lưu PostgreSQL với ClusterControl

Quản lý các bản sao lưu có thể là một công việc phức tạp và rủi ro nếu thực hiện theo cách thủ công. Bạn phải biết rằng bản sao lưu đang hoạt động theo chính sách sao lưu của bạn vì bạn không muốn rơi vào tình huống bạn cần bản sao lưu và bản sao lưu không hoạt động hoặc không tồn tại. Đó chắc chắn sẽ là một vấn đề lớn. Vì vậy, tốt nhất ở đây là sử dụng một ứng dụng quản lý sao lưu đã được thử nghiệm trong trận chiến, để tránh bất kỳ sự cố nào trong trường hợp thất bại.

PGHoard là một daemon sao lưu PostgreSQL và hệ thống khôi phục lưu trữ dữ liệu sao lưu trong các cửa hàng đối tượng đám mây. Nó hỗ trợ PostgreSQL 9.3 trở lên, cho đến PostgreSQL 11, phiên bản được hỗ trợ mới nhất ngay bây giờ. Phiên bản PGHoard hiện tại là 2.1.0, được phát hành vào tháng 5 năm 2019 (1 năm trước).

ClusterControl là phần mềm quản lý và tự động hóa không cần tác nhân dành cho các cụm cơ sở dữ liệu. Nó giúp triển khai, giám sát, quản lý và mở rộng quy mô máy chủ / cụm cơ sở dữ liệu của bạn trực tiếp từ giao diện người dùng ClusterControl hoặc sử dụng ClusterControl CLI. Nó bao gồm các tính năng quản lý sao lưu và hỗ trợ các phiên bản PostgreSQL 9.6, 10, 11 và 12. Phiên bản ClusterControl hiện tại là 1.7.6, được phát hành vào tháng trước, vào tháng 4 năm 2020.

Trong blog này, chúng tôi sẽ so sánh PGHoard với tính năng Quản lý sao lưu ClusterControl và chúng tôi sẽ xem cách cài đặt và sử dụng cả hai hệ thống. Đối với điều này, chúng tôi sẽ sử dụng máy chủ Ubuntu 18.04 và PostgreSQL11 (vì đây là phiên bản được hỗ trợ mới nhất để sử dụng PGHoard). Chúng tôi sẽ cài đặt PGHoard trong cùng một máy chủ cơ sở dữ liệu và nhập nó vào ClusterControl.

So sánh các Tính năng Quản lý Sao lưu

PGHoard

Một số tính năng quan trọng nhất của PGHoard là:

  • Tự động sao lưu cơ sở định kỳ
  • Bản sao lưu nhật ký giao dịch tự động
  • Hỗ trợ Sao lưu nóng độc lập
  • Hỗ trợ lưu trữ đối tượng đám mây (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Khôi phục sao lưu trực tiếp từ bộ lưu trữ đối tượng, được nén và mã hóa
  • Point-in-time-recovery (PITR)
  • Khởi tạo chế độ chờ mới từ các bản sao lưu bộ nhớ đối tượng, được tự động định cấu hình làm chế độ chờ nóng tái tạo
  • Nén và mã hóa song song

Một trong những cách để sử dụng là có một máy sao lưu riêng, để PGHoard có thể kết nối với pg_receivexlog để nhận các tệp WAL từ cơ sở dữ liệu. Một chế độ khác là sử dụng pghoard_postgres_command như một archive_command của PostgreSQL. Trong cả hai trường hợp, PGHoard tạo các bản sao lưu cơ sở định kỳ bằng cách sử dụng pg_basebackup.

ClusterControl

Hãy cùng xem một số tính năng quan trọng nhất của hệ thống này:

  • Giao diện người dùng thân thiện với người dùng
  • Sao lưu và Khôi phục (trong cùng một nút hoặc trong một nút riêng biệt)
  • Lên lịch sao lưu
  • Tạo một nhóm từ Sao lưu
  • Xác minh sao lưu tự động
  • Nén
  • Mã hóa
  • Tải lên đám mây tự động
  • Point-in-time-recovery (PITR)
  • Các phương pháp sao lưu khác nhau (Lôgic, Vật lý, Toàn bộ, Tăng dần, v.v.)
  • Báo cáo hoạt động dự phòng

Vì đây không chỉ là hệ thống Quản lý sao lưu, chúng tôi sẽ đề cập đến các tính năng quan trọng khác nhau không chỉ các tính năng liên quan đến Sao lưu:

  • Triển khai / Nhập cơ sở dữ liệu:Độc lập, Cụm / Sao chép, Bộ cân bằng tải
  • Chia tỷ lệ:Thêm / loại bỏ nút, đọc bản sao, sao chép cụm, sao chép cụm thành cụm
  • Giám sát:Trang tổng quan tùy chỉnh, Phát hiện lỗi, Giám sát truy vấn, Cố vấn hiệu suất, Cảnh báo và thông báo, Phát triển cố vấn tùy chỉnh
  • Phục hồi tự động:Khôi phục nút và cụm, chuyển đổi dự phòng, môi trường sẵn sàng cao
  • Quản lý:Quản lý cấu hình, Nâng cấp bản vá cơ sở dữ liệu, Quản lý người dùng cơ sở dữ liệu, Tích hợp đám mây, Báo cáo hoạt động, Quản lý ProxySQL
  • Bảo mật:Quản lý khóa, Kiểm soát truy cập dựa trên vai trò, Xác thực bằng LDAP / Active Directory, Mã hóa SSL

Cấu trúc liên kết được đề xuất là có một nút riêng biệt để chạy ClusterControl, để đảm bảo rằng, trong trường hợp không thành công, bạn có thể tận dụng các tính năng ClusterControl tự động khôi phục và chuyển đổi dự phòng (trong số các tính năng hữu ích khác) .

Yêu cầu Hệ thống

PGHoard

Theo tài liệu, PGHoard có thể sao lưu và khôi phục PostgreSQL phiên bản 9.3 trở lên. Daemon được triển khai bằng Python và hoạt động với CPython phiên bản 3.5 hoặc mới hơn. Các mô-đun Python sau có thể được yêu cầu tùy thuộc vào yêu cầu:

  • psycopg2 để tra cứu siêu dữ liệu nhật ký giao dịch
  • yêu cầu đối với kiến ​​trúc máy khách-máy chủ nội bộ
  • azure để lưu trữ đối tượng Microsoft Azure
  • botocore dành cho lưu trữ đối tượng AWS S3 (hoặc Ceph-S3)
  • google-api-client để lưu trữ đối tượng Google Cloud
  • mật mã để giải mã và mã hóa dự phòng (yêu cầu phiên bản 0.8 hoặc mới hơn)
  • linh hoạt để nén và giải nén Snappy
  • zstandard để nén và giải nén Zstandard (zstd)
  • systemd để tích hợp systemd
  • swiftclient để lưu trữ đối tượng OpenStack Swift
  • paramiko để lưu trữ đối tượng sftp

Không có đề cập đến Hệ điều hành được hỗ trợ, nhưng nó nói rằng nó đã được thử nghiệm trên các hệ thống Linux x86-64 hiện đại, nhưng sẽ hoạt động trên các nền tảng khác cung cấp các mô-đun cần thiết.

ClusterControl

Máy chủ ClusterControl yêu cầu phần mềm sau:

  • Máy chủ / máy khách MySQL
  • Máy chủ web Apache (hoặc nginx)
  • mod_rewrite
  • mod_ssl
  • cho phép ghi đè .htaccess
  • PHP (5.4 trở lên)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Bảo mật nhân Linux (SElinux hoặc AppArmor) - phải được tắt hoặc đặt ở chế độ cho phép
  • Máy chủ / máy khách OpenSSH
  • BASH (khuyến nghị:phiên bản 4 trở lên)
  • Máy chủ NTP - Thời gian của tất cả các máy chủ phải được đồng bộ hóa theo một múi giờ
  • socat hoặc netcat - để phát trực tuyến các bản sao lưu

Và nó hỗ trợ các hệ điều hành khác nhau:

  • Red Hat Enterprise Linux 6.x / 7.x / 8.x
  • CentOS 6.x / 7.x / 8.x
  • Ubuntu 12.04 / 14.04 / 16.04 / 18.04 LTS
  • Debian 7.x / 8.x / 9.x / 10.x

Nếu ClusterControl được cài đặt thông qua tập lệnh cài đặt (install-cc) hoặc trình quản lý gói (yum / apt), tất cả các phần phụ thuộc sẽ tự động được đáp ứng.

Đối với PostgreSQL, nó hỗ trợ các phiên bản 9.6 / 10.x / 11.x / 12.x. Bạn có thể tìm thấy danh sách đầy đủ các cơ sở dữ liệu được hỗ trợ trong tài liệu.

Nó chỉ yêu cầu quyền truy cập SSH không mật khẩu vào các nút cơ sở dữ liệu (sử dụng khóa riêng và công khai) và người dùng hệ điều hành đặc quyền (có thể là người dùng root hoặc sudo).

Quá trình Cài đặt

Quá trình cài đặt PGHoard

Chúng tôi sẽ giả sử bạn đã thiết lập và chạy cơ sở dữ liệu PostgreSQL của mình, vì vậy hãy cài đặt các gói còn lại. PGHoard là một gói Python, vì vậy sau khi bạn đã cài đặt các gói cần thiết, bạn có thể cài đặt nó bằng cách sử dụng lệnh pip:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

Là một phần của quá trình cài đặt này, bạn cần chuẩn bị phiên bản PostgreSQL để hoạt động với công cụ này. Đối với điều này, bạn sẽ cần chỉnh sửa postgresql.conf để cho phép lưu trữ WAL và tăng max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Thay đổi này sẽ yêu cầu khởi động lại cơ sở dữ liệu:

$ service postgresql restart

Bây giờ, hãy tạo người dùng cơ sở dữ liệu cho PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Và thêm dòng sau vào tệp pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Tải lại dịch vụ cơ sở dữ liệu:

$ service postgresql reload

Để hoạt động, bạn cần tạo tệp cấu hình JSON cho PGHoard. Chúng ta sẽ thấy điều này trong phần “Sử dụng” tiếp theo.

Quá trình cài đặt ClusterControl

Có các phương pháp cài đặt khác nhau như được đề cập trong tài liệu. Trong trường hợp cài đặt thủ công, các gói bắt buộc được chỉ định trong cùng một tài liệu và có hướng dẫn từng bước cho tất cả quy trình.

Hãy xem ví dụ về cách sử dụng tập lệnh cài đặt tự động.

$ wget http://www.severalnines.com/downloads/cmon/install-cc

$ chmod +x install-cc

$ sudo ./install-cc   # omit sudo if you run as root

Tập lệnh cài đặt sẽ cố gắng tự động hóa các tác vụ sau:

  • Cài đặt và định cấu hình máy chủ MySQL cục bộ (được ClusterControl sử dụng để lưu trữ dữ liệu giám sát)
  • Cài đặt và định cấu hình gói bộ điều khiển ClusterControl thông qua trình quản lý gói
  • Cài đặt phần phụ thuộc ClusterControl thông qua trình quản lý gói
  • Định cấu hình Apache và SSL
  • Định cấu hình mã thông báo và URL API ClusterControl
  • Định cấu hình Bộ điều khiển ClusterControl với các tùy chọn cấu hình tối thiểu
  • Bật dịch vụ CMON khi khởi động và khởi động nó

Đang chạy tập lệnh được đề cập, bạn sẽ nhận được câu hỏi về cách gửi dữ liệu chẩn đoán:

$ sudo ./install-cc

!!

Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported

Minimum system requirements: 2GB+ RAM, 2+ CPU cores

Server Memory: 1024M total, 922M free

MySQL innodb_buffer_pool_size set to 512M

Severalnines would like your help improving our installation process.

Information such as OS, memory and install success helps us improve how we onboard our users.

None of the collected information identifies you personally.

!!

=> Would you like to help us by sending diagnostics data for the installation? (Y/n):

Sau đó, nó sẽ bắt đầu cài đặt các gói cần thiết. Câu hỏi tiếp theo là về tên máy chủ sẽ được sử dụng:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Khi cơ sở dữ liệu cục bộ được cài đặt, trình cài đặt sẽ bảo mật nó bằng cách tạo mật khẩu gốc mà bạn phải nhập:

=> Starting database. This may take a couple of minutes. Do NOT press any key.

Redirecting to /bin/systemctl start mariadb.service

=> Securing the MySQL Server ...

=> !! In order to complete the installation you need to set a MySQL root password !!

=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

=> Press any key to proceed ...

Và mật khẩu người dùng CMON, sẽ được ClusterControl sử dụng:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

Thế là xong. Bằng cách này, bạn sẽ có tất cả mọi thứ mà không cần cài đặt hoặc định cấu hình bất cứ thứ gì theo cách thủ công.

=> ClusterControl installation completed!

Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.

Public/external IP => http://10.10.10.10/clustercontrol

Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Lần đầu tiên bạn truy cập vào giao diện người dùng, bạn sẽ cần đăng ký thời gian dùng thử miễn phí 30 ngày.

Sau khi bản dùng thử miễn phí 30 ngày của bạn kết thúc, cài đặt của bạn sẽ tự động chuyển đổi thành ấn bản cộng đồng trừ khi bạn có giấy phép thương mại.

Sử dụng Quản lý Sao lưu

Sử dụng PGHoards

Sau khi công cụ này được cài đặt, bạn cần tạo tệp JSON (pghoard.json) với cấu hình PGHoard. Đây là một ví dụ:

{

"backup_location": "/var/lib/pghoard",

"backup_sites": {

"default": {

"nodes": [

{

"host": "127.0.0.1",

"password": "Password",

"port": 5432,

"user": "pghoard"

}

],

"object_storage": {

"storage_type": "local",

"directory": "./backups"

},

"pg_data_directory": "/var/lib/postgresql/11/main/"

}

}

}

Trong ví dụ này, chúng tôi sẽ sao lưu và lưu trữ cục bộ, nhưng bạn cũng có thể định cấu hình tài khoản đám mây và lưu trữ ở đó:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Bạn có thể tìm thêm chi tiết về cấu hình trong tài liệu.

Bây giờ, hãy chạy sao lưu bằng tệp JSON này:

$ pghoard --short-log --config pghoard.json

INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'

INFO Creating a new basebackup for 'default' because there are currently none

INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057

INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'

INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s

INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -

INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0

INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s

INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s

Trong thư mục “backup_location” (trong trường hợp này là / var / lib / pghoard), bạn sẽ tìm thấy tệp pghoard_state.json với trạng thái hiện tại:

$ ls -l /var/lib/pghoard

total 48

drwxr-xr-x 6 root root  4096 May 21 13:13 default

-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json

Và một thư mục trang web (trong trường hợp này là “default /”) với bản sao lưu:

$ ls -l /var/lib/pghoard/default/

total 16

drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup

drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming

Bạn có thể kiểm tra danh sách sao lưu bằng lệnh follogin:

$ pghoard_restore list-basebackups --config pghoard.json

Available 'default' basebackups:

Basebackup                                Backup size    Orig size  Start time

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

default/basebackup/2020-05-21_13-13_0            4 MB        23 MB  2020-05-21T13:13:31Z

Cách sử dụng ClusterControl

Đối với điều này, chúng tôi sẽ giả sử bạn đã nhập cụm cơ sở dữ liệu PostgreSQL của mình trong ClusterControl hoặc bạn đã triển khai nó bằng hệ thống này.

Trong ClusterControl, chọn cụm của bạn và chuyển đến phần "Sao lưu", sau đó chọn "Tạo bản sao lưu".

Đối với ví dụ này, chúng tôi sẽ sử dụng tùy chọn “Lên lịch sao lưu”. Khi lên lịch sao lưu, ngoài việc chọn các tùy chọn phổ biến như phương pháp hoặc bộ nhớ, bạn cũng cần chỉ định lịch trình / tần suất.

Bạn phải chọn một phương pháp, máy chủ sẽ được thực hiện sao lưu và nơi bạn muốn lưu trữ nó. Bạn cũng có thể tải bản sao lưu của mình lên đám mây (AWS, Google hoặc Azure) bằng cách bật nút tương ứng.

Sau đó, bạn cần chỉ định việc sử dụng nén, mã hóa và lưu giữ sao lưu của bạn. Trong bước này, bạn cũng có thể bật tính năng “Xác minh bản sao lưu” cho phép bạn xác nhận rằng bản sao lưu có thể sử dụng được bằng cách khôi phục nó trong một nút khác.

Nếu bạn bật tùy chọn “Tải bản sao lưu lên đám mây”, bạn sẽ xem phần để chỉ định nhà cung cấp đám mây và thông tin đăng nhập. Nếu bạn chưa tích hợp tài khoản đám mây của mình với ClusterControl, bạn phải đi tới ClusterControl -> Tích hợp -> Nhà cung cấp đám mây để thêm nó.

Trên phần sao lưu, bạn có thể xem tiến trình sao lưu và thông tin như phương pháp, kích thước, vị trí, v.v.

Dòng lệnh ClusterControl (s9s)

Đối với các tác vụ kịch bản và tự động hóa hoặc thậm chí nếu bạn chỉ thích dòng lệnh, ClusterControl có công cụ s9s. Đó là một công cụ dòng lệnh để quản lý cụm cơ sở dữ liệu của bạn. Hãy xem một ví dụ về cách tạo và liệt kê các bản sao lưu bằng công cụ này:

$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait

Bạn có thể tìm thêm các ví dụ và thông tin trong phần tài liệu ClusterControl CLI.

Kết luận

Như kết luận của việc so sánh các hệ thống quản lý sao lưu đã đề cập này, chúng ta có thể nói rằng PGHoard là một giải pháp miễn phí nhưng phức tạp cho nhiệm vụ này. Bạn sẽ cần một chút thời gian để hiểu cách thức hoạt động và cách định cấu hình nó, vì tài liệu chính thức hơi nghèo nàn về điều đó. Ngoài ra, nó có vẻ hơi lỗi thời, vì bản phát hành gần đây nhất là 1 năm trước. Hơn nữa, ClusterControl là một hệ thống quản lý tất cả trong một với rất nhiều tính năng không chỉ quản lý sao lưu, với giao diện người dùng thân thiện và dễ sử dụng. Nó có cộng đồng (với các tính năng có sẵn hạn chế) và các phiên bản trả phí với thời gian dùng thử miễn phí 30 ngày. Tài liệu rõ ràng và đầy đủ, với các ví dụ và thông tin chi tiết.

Chúng tôi hy vọng blog này sẽ giúp bạn đưa ra quyết định tốt nhất để giữ an toàn cho dữ liệu của mình.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo n hàng NULL trong PostgreSQL

  2. Chuyển dự án Django từ backend sqlite3 sang postgresql bị lỗi khi tải datadump

  3. Làm cách nào để thay đổi cột hiện có thành Identity trong PostgreSQL 11.1

  4. không thể tạo khóa chính tự động tăng thêm bằng flask-sqlalchemy

  5. Chọn kiểu dữ liệu của trường trong postgres