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

Chỉ chạy PostgreSQL trong bộ nhớ

(Chuyển câu trả lời của tôi từ Sử dụng PostgreSQL trong bộ nhớ và khái quát hóa nó):

Bạn không thể chạy Pg trong quá trình, trong bộ nhớ

Tôi không thể tìm ra cách chạy cơ sở dữ liệu Postgres trong bộ nhớ để thử nghiệm. Có thể không?

Không, no không thể. PostgreSQL được triển khai bằng C và được biên dịch sang mã nền tảng. Không giống như H2 hoặc Derby, bạn không thể chỉ tải jar và kích hoạt nó như một DB trong bộ nhớ hữu ích.

Không giống như SQLite, cũng được viết bằng C và được biên dịch sang mã nền tảng, PostgreSQL cũng không thể được tải trong quá trình. Nó yêu cầu nhiều quy trình (một quy trình trên mỗi kết nối) vì đó là kiến ​​trúc đa xử lý, không phải đa luồng. Yêu cầu đa xử lý có nghĩa là bạn phải khởi chạy quản trị viên bưu điện như một quy trình độc lập.

Thay vào đó:định cấu hình trước kết nối

Tôi khuyên bạn chỉ cần viết các bài kiểm tra của mình để mong đợi một tên máy chủ / tên người dùng / mật khẩu cụ thể hoạt động và có khai thác kiểm tra CREATE DATABASE một cơ sở dữ liệu cố định, rồi đến DROP DATABASE vào cuối cuộc chạy. Nhận chi tiết kết nối cơ sở dữ liệu từ tệp thuộc tính, xây dựng thuộc tính đích, biến môi trường, v.v.

Thật an toàn khi sử dụng phiên bản PostgreSQL hiện có mà bạn đã có cơ sở dữ liệu mà bạn quan tâm, miễn là người dùng mà bạn cung cấp cho các bài kiểm tra đơn vị của mình là không siêu người dùng, chỉ người dùng có CREATEDB các quyền. Tệ nhất là bạn sẽ tạo ra các vấn đề về hiệu suất trong các cơ sở dữ liệu khác. Tôi muốn chạy một bản cài đặt PostgreSQL hoàn toàn biệt lập để thử nghiệm vì lý do đó.

Thay vào đó:Khởi chạy phiên bản PostgreSQL mới để thử nghiệm

Ngoài ra, nếu bạn thực sự quan tâm đến bạn có thể đặt bộ khai thác thử nghiệm của mình định vị initdbpostgres nhị phân, chạy initdb để tạo cơ sở dữ liệu, hãy sửa đổi pg_hba.conf thành trust , chạy postgres để khởi động nó trên một cổng ngẫu nhiên, tạo người dùng, tạo DB và chạy thử nghiệm. Bạn thậm chí có thể gói các tệp nhị phân PostgreSQL cho nhiều kiến ​​trúc trong một jar và giải nén các tệp cho kiến ​​trúc hiện tại vào một thư mục tạm thời trước khi chạy thử nghiệm.

Cá nhân tôi nghĩ đó là một nỗi đau lớn cần phải tránh; thật dễ dàng hơn khi chỉ cần cấu hình một DB thử nghiệm. Tuy nhiên, nó trở nên dễ dàng hơn một chút với sự ra đời của include_dir hỗ trợ trong postgresql.conf; bây giờ bạn chỉ có thể nối một dòng, sau đó viết tệp cấu hình đã tạo cho tất cả phần còn lại.

Kiểm tra nhanh hơn với PostgreSQL

Để biết thêm thông tin về cách an toàn cải thiện hiệu suất của PostgreSQL cho mục đích thử nghiệm, hãy xem câu trả lời chi tiết mà tôi đã viết về chủ đề này trước đó:Tối ưu hóa PostgreSQL để kiểm tra nhanh

Phương ngữ PostgreSQL của H2 không phải là phương ngữ thay thế thực sự

Thay vào đó, một số người sử dụng cơ sở dữ liệu H2 ở chế độ phương ngữ PostgreSQL để chạy thử nghiệm. Tôi nghĩ điều đó cũng tệ như những người Rails sử dụng SQLite để thử nghiệm và PostgreSQL để triển khai sản xuất.

H2 hỗ trợ một số phần mở rộng PostgreSQL và mô phỏng phương ngữ PostgreSQL. Tuy nhiên, nó chỉ là - một giả lập. Bạn sẽ tìm thấy các khu vực mà H2 chấp nhận một truy vấn nhưng PostgreSQL thì không, nơi hành vi khác nhau, v.v. Bạn cũng sẽ tìm thấy nhiều nơi mà PostgreSQL hỗ trợ thực hiện điều gì đó mà H2 không thể - như các hàm cửa sổ, tại thời điểm đang viết.

Nếu bạn hiểu những hạn chế của phương pháp này và truy cập cơ sở dữ liệu của bạn đơn giản, H2 có thể ổn. Nhưng trong trường hợp đó, bạn có thể là ứng cử viên sáng giá hơn cho ORM tóm tắt cơ sở dữ liệu vì dù sao thì bạn cũng không sử dụng các tính năng thú vị của nó - và trong trường hợp đó, bạn không phải quan tâm đến khả năng tương thích của cơ sở dữ liệu nữa.

Không gian bảng không phải là câu trả lời!

Đ ừng sử dụng không gian bảng để tạo cơ sở dữ liệu "trong bộ nhớ". Nó không chỉ không cần thiết vì dù sao nó cũng sẽ không giúp hiệu suất đáng kể, mà còn là một cách tuyệt vời để làm gián đoạn quyền truy cập vào bất kỳ thứ gì khác mà bạn có thể quan tâm trong cùng một bản cài đặt PostgreSQL. Tài liệu 9.4 hiện có cảnh báo sau:

CẢNH BÁO

Ngay cả khi nằm bên ngoài thư mục dữ liệu PostgreSQL chính, không gian bảng là một phần không thể thiếu của cụm cơ sở dữ liệu và không thể được coi là một tập hợp các tệp dữ liệu tự trị. Chúng phụ thuộc vào siêu dữ liệu có trong thư mục dữ liệu chính và do đó không thể được gắn vào một cụm cơ sở dữ liệu khác hoặc được sao lưu riêng lẻ. Để bắt đầu. Đặt một vùng bảng trên hệ thống tệp tạm thời như một đĩa ram có nguy cơ ảnh hưởng đến độ tin cậy của toàn bộ cụm.

bởi vì tôi nhận thấy có quá nhiều người đang làm điều này và gặp rắc rối.

(Nếu bạn đã làm điều này, bạn có thể mkdir thư mục không gian bảng bị thiếu để PostgreSQL bắt đầu lại, sau đó DROP cơ sở dữ liệu bị thiếu, bảng, v.v. Tốt hơn là đừng làm điều đó.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xuất lược đồ của cơ sở dữ liệu trong PostgreSQL?

  2. Cách cấu hình PostgreSQL để chấp nhận tất cả các kết nối đến

  3. PostgreSQL có thể lập chỉ mục các cột mảng không?

  4. Cách chuyển đổi chuỗi thành dấu thời gian trong PostgreSQL

  5. Entity Framework 6 với Npgsql