Я создал схему «customer1» с таблицей «user» и пытаюсь подключить ее из JDBC с помощью Connection.setSchema ():
String url = "jdbc:postgresql://localhost/project";
Properties props = new Properties();
props.setProperty("user", "postgres");
props.setProperty("password", "postgres");
try (Connection conn = DriverManager.getConnection(url, props)) {
conn.setSchema("customer1");
try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SHOW search_path")) {
rs.next();
System.out.println("search_path: " + rs.getString(1));
}
try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name FROM user LIMIT 1")) {
if (rs.next()) {
System.out.println("user name: " + rs.getString("name"));
}
}
}
Этот код печатает:
search_path: customer1
и затем он выдает PSQLException с сообщением:
ERROR: column "name" does not exist
Если я квалифицирую "пользовательскую" таблицу в запросе SELECT:
try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT name FROM customer1.user LIMIT 1")) {
if (rs.next()) {
System.out.println("user name: " + rs.getString("name"));
}
}
, то она печатает:
search_path: customer1
user name: name1
и ошибки не возникает.Я использую драйвер JDBC 42.2.2 и сервер PostgreSQL 10.4.Почему настройка схемы не работает?