001package io.ebean.datasource;
002
003import org.slf4j.Logger;
004import org.slf4j.LoggerFactory;
005
006import java.sql.Connection;
007import java.sql.PreparedStatement;
008import java.sql.SQLException;
009
010/**
011 * Creates a schema and role using the database owner.
012 */
013public class PostgresInitDatabase implements InitDatabase {
014
015  private static final Logger log = LoggerFactory.getLogger(PostgresInitDatabase.class);
016
017  @Override
018  public void run(Connection connection, DataSourceConfig config) throws SQLException {
019
020    String username = config.getUsername();
021    String password = config.getPassword();
022
023    log.info("Creating schema and role for {}", username);
024    execute(connection, String.format("create schema if not exists %s", username));
025    execute(connection, String.format("create role %s with login password '%s'", username, password));
026    execute(connection, String.format("grant all on schema %s to %s", username, username));
027  }
028
029  private void execute(Connection connection, String sql) throws SQLException {
030    try (PreparedStatement statement = connection.prepareStatement(sql)) {
031      statement.execute();
032    }
033  }
034}