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}