PostgreSQL в памяти [дубликат]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
66
задан Erwin Brandstetter 29 April 2015 в 18:10
поделиться

5 ответов

Это невозможно в Postgres. Он не предлагает движок in-process / in-memory, такой как HSQLDB или MySQL.

Если вы хотите создать автономную среду, вы можете поместить двоичные файлы Postgres в SVN (но это больше, чем просто один исполняемый файл).

Вам нужно будет запустить initdb , чтобы настроить тестовую базу данных, прежде чем вы сможете что-либо сделать с этим. Это можно сделать из командного файла или с помощью Runtime.exec (). Но обратите внимание, что initdb - это не то, что быстро. Вы определенно не хотите запускать это для каждого теста. Тем не менее, вы можете уйти от этого до своего тестового набора.

Однако, хотя это можно сделать, я бы рекомендовал иметь специальную установку Postgres, где вы просто воссоздаете тестовую базу данных, прежде чем запускать тесты.

Вы можете повторно создать тестовую базу данных, используя базу данных шаблонов, которая делает ее довольно быстрой (намного быстрее, чем запуск initdb для каждого тестового прогона)

31
ответ дан a_horse_with_no_name 28 August 2018 в 20:52
поделиться

Вы можете использовать TestContainers для разворачивания контейнера докеры PosgreSQL для тестов: http://testcontainers.viewdocs.io/testcontainers-java/usage/database_containers/

TestContainers предоставляют JUnit @ Rule / @ ClassRule: этот режим запускает базу данных внутри контейнера перед вашими испытаниями и срывает его потом.

Пример:

public class SimplePostgreSQLTest {

    @Rule
    public PostgreSQLContainer postgres = new PostgreSQLContainer();

    @Test
    public void testSimple() throws SQLException {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setJdbcUrl(postgres.getJdbcUrl());
        hikariConfig.setUsername(postgres.getUsername());
        hikariConfig.setPassword(postgres.getPassword());

        HikariDataSource ds = new HikariDataSource(hikariConfig);
        Statement statement = ds.getConnection().createStatement();
        statement.execute("SELECT 1");
        ResultSet resultSet = statement.getResultSet();

        resultSet.next();
        int resultSetInt = resultSet.getInt(1);
        assertEquals("A basic SELECT query succeeds", 1, resultSetInt);
    }
}
6
ответ дан Andrejs 28 August 2018 в 20:52
поделиться

Вы также можете использовать настройки конфигурации PostgreSQL (такие как подробные в вопросе и принятом ответе здесь ) для достижения производительности без необходимости прибегать к базе данных в памяти.

59
ответ дан Community 28 August 2018 в 20:52
поделиться

Или вы можете создать TABLESPACE в ramfs / tempfs и создать там все свои объекты. Недавно я указал на статью о том, как это делается в Linux .

Warning

Это может поставить под угрозу целостность вашего всего кластера базы данных . Прочтите добавленное предупреждение в руководстве. Так что это только вариант для расходных данных.

Для модульного тестирования он должен работать нормально. Если вы используете другие базы данных на одном компьютере, обязательно используйте отдельный кластер баз данных (который имеет свой собственный порт).

62
ответ дан Erwin Brandstetter 28 August 2018 в 20:52
поделиться

Теперь можно запустить экземпляр PostgreSQL в памяти в тестах JUnit через компонент Embedded PostgreSQL из OpenTable: https://github.com/opentable/otj-pg-embedded .

Добавив зависимость к библиотеке otj-pg-embedded ( https://mvnrepository.com/artifact/com.opentable.components/otj-pg-embedded ) вы можете запустить и остановить свой собственный экземпляр PostgreSQL в своих @Before и @Afer hooks:

EmbeddedPostgres pg = EmbeddedPostgres.start();

Они даже предлагают правило JUnit для автоматического запуска JUnit и остановки вашего сервера баз данных PostgreSQL для вас:

@Rule
public SingleInstancePostgresRule pg = EmbeddedPostgresRules.singleInstance();
13
ответ дан Rubms 28 August 2018 в 20:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: