Helpex - Trao đổi & giúp đỡ Đăng nhập
48

Có một PostgreSql được nhúng để chúng tôi có thể kiểm tra đơn vị ứng dụng điều khiển PostgreSql của mình không?

Vì PostgreSql có một số phương ngữ, nên sử dụng chính PostgreSql được nhúng hơn là các cơ sở dữ liệu nhúng khác.

Được nhúng không nhất thiết có nghĩa là nó phải được nhúng vào quy trình JVM. Nó cũng không nhất thiết phải sử dụng tính năng bền bỉ trong bộ nhớ. Nó sẽ được tải tự động bởi bộ quản lý phụ thuộc (Maven, Gradle), để Unit tests có thể chạy trên mọi máy mà không cần phải cài đặt và cấu hình một máy chủ PostgreSQL cục bộ.

48 hữu ích 0 bình luận 54k xem chia sẻ
35

Không, không có PostgreSQL được nhúng, theo nghĩa là một thư viện cơ sở dữ liệu có thể tải trong quá trình. PostgreSQL là định hướng quy trình; mỗi phần phụ trợ có một luồng và nó tạo ra nhiều quy trình để thực hiện công việc. Nó không có ý nghĩa như một thư viện.

Cơ sở dữ liệu H2 hỗ trợ một tập hợp con giới hạn của phương ngữ SQL PostgreSQL và việc sử dụng trình điều khiển PgJDBC.

Những gì bạn có thể làm là initdbmột cơ sở dữ liệu tạm thời mới , khởi động nó pg_ctltrên một cổng ngẫu nhiên để nó không xung đột với các phiên bản khác, chạy các bài kiểm tra của bạn, sau đó sử dụng pg_ctlđể dừng nó và cuối cùng là xóa cơ sở dữ liệu tạm thời.

Tôi thực sự khuyên bạn nên chạy các postgre tạm thời trên một cổng không phải mặc định để bạn không có nguy cơ va chạm với bất kỳ PostgreSQL nào được cài đặt cục bộ trên máy đang chạy thử nghiệm.

(Có được "nhúng PostgreSQL theo nghĩa ecpg , thực chất là PostgreSQL client nhúng trong C mã nguồn như mở rộng ngôn ngữ C Preprocessor dựa. Nó vẫn đòi hỏi một máy chủ đang chạy và đó là một chút khó chịu để sử dụng, không thực sự khuyến khích. Nó chủ yếu tồn tại để giúp chuyển từ nhiều cơ sở dữ liệu khác dễ dàng hơn.)

35 hữu ích 5 bình luận chia sẻ
53

Đây là một máy chủ PostgresSQL "nhúng" đã được thiết kế để kiểm tra đơn vị từ Java:

https://github.com/yandex-qatools/postgresql-embedded

Postgresql được nhúng sẽ cung cấp một cách trung lập cho nền tảng để chạy mã nhị phân postgres trong các bài kiểm tra đơn vị . Phần lớn mã đã được tạo ra từ quy trình nhúng của Flapdoodle OSS

Ngoài ra, cũng có các dự án tương tự cho Mongo , Redis , Memcachednodejs .

53 hữu ích 5 bình luận chia sẻ
27

Tôi đã thử dự án do @btiernay (yandex-qatools) đề xuất. Tôi đã dành một vài ngày tốt với điều này và không có bất kỳ sự xúc phạm nào, đó là giải pháp được thiết kế kỹ lưỡng không hoạt động trong trường hợp của tôi vì tôi muốn tải xuống các tệp nhị phân từ kho lưu trữ nội bộ thay vì truy cập internet công cộng. Về lý thuyết thì nó hỗ trợ nhưng thực tế thì không.

Thành phần PostgreSQL nhúng OpenTable

Tôi đã kết thúc bằng cách sử dụng otj-pg-nhúng và nó hoạt động như một sự quyến rũ. Nó đã được đề cập trong các bình luận vì vậy tôi nghĩ tôi cũng sẽ đề cập đến nó ở đây.

Tôi đã sử dụng nó làm DB độc lập và không thông qua quy tắc cho cả các bài kiểm tra đơn vị và phát triển cục bộ.

Sự phụ thuộc:

<dependency>
    <groupId>com.opentable.components</groupId>
    <artifactId>otj-pg-embedded</artifactId>
    <version>0.7.1</version>
</dependency>

Mã:

@Bean
public DataSource dataSource(PgBinaryResolver pgBinaryResolver) throws IOException {
    EmbeddedPostgres pg = EmbeddedPostgres.builder()
        .setPgBinaryResolver(pgBinaryResolver)
        .start();


    // It doesn't not matter which databse it will be after all. We just use the default.
    return pg.getPostgresDatabase();
}

@Bean
public PgBinaryResolver nexusPgBinaryResolver() {
    return (system, machineHardware) -> {
        String url = getArtifactUrl(postgrePackage, system + SEPARATOR + machineHardware);
        log.info("Will download embedded Postgre package from: {}", url);

        return new URL(url).openConnection().getInputStream();
    };
}

private static String getArtifactUrl(PostgrePackage postgrePackage, String classifier) {
    // Your internal repo URL logic
}
27 hữu ích 3 bình luận chia sẻ
4

Bạn có thể sử dụng một phiên bản vùng chứa của PostgreSQL.

Vì việc quay một thùng chứa chỉ mất vài giây, điều này sẽ đủ tốt cho những người yêu thích. Hơn nữa, trong trường hợp bạn cần duy trì dữ liệu, ví dụ: để điều tra, bạn không cần phải lưu toàn bộ vùng chứa, chỉ lưu các tệp dữ liệu, có thể được ánh xạ bên ngoài vùng chứa.

Bạn có thể tìm thấy một ví dụ về cách làm điều này tại đây .

4 hữu ích 0 bình luận chia sẻ
3

Nếu bạn đang muốn chạy một phiên bản postgres đang trong quá trình xử lý từ bộ thử nghiệm Tích hợp (hoặc tương tự), thì postgresql nhúng hoạt động tốt đối với tôi.

Tôi đã viết một plugin maven nhỏ có thể được sử dụng như một trình bao bọc maven xung quanh phiên bản được phân nhánh của postgresql được nhúng.

3 hữu ích 5 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ postgresql maven junit embedded database database-driven , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading