Geotools(Version 2.7.4)를 이용하여 PostgreSQL(Version 9.3) 테이블을 추가하려고 하는데 schema를 생성할 때 다음과 같은 오류가 발생하였다.


java.io.IOException: Error occurred creating table
at org.geotools.jdbc.JDBCDataStore.createSchema(JDBCDataStore.java:660)
at org.geotools.jdbc.JDBCDataStore.createSchema(JDBCDataStore.java:138)
... 25 more
Caused by: org.postgresql.util.PSQLException: ERROR: function srid(geometry) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
... 34 more

오류내용을 확인해 보니 srid function을 찾을 수 없다라고 나오는데, 기존 8.x버전에서 버전이 상향되면서 postgis 함수가 이름을 변경했는데 geotools 2.7.4버전 gt-jdbc-postgis가 postgresql-8.4-701.jdbc3를 참조하고 있었다.

사용하고 있는 DB 버전이 9.x 버전이기 때문에 기존의 함수를 추가해주기 위해서 C:\Program Files\PostgreSQL\9.3\share\contrib\postgis-2.1\legacy.sql 또는 legacy_minimal.sql에서 함수생성 쿼리를 찾을 수 있는데 아래 해당하는 데이터베이스에서 수행하면 된다.
(정확히 말하자면 PostgreSQL이 아니라 PostGIS에 있는 Spatial Function 이다.)



그런데 다음과 같은 오류가 또 발생하였다.


java.io.IOException: Error occurred creating table

at org.geotools.jdbc.JDBCDataStore.createSchema(JDBCDataStore.java:660)

at org.geotools.jdbc.JDBCDataStore.createSchema(JDBCDataStore.java:138)

... 25 more

Caused by: org.postgresql.util.PSQLException: Cannot commit when autoCommit is enabled.

at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:828)

at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)

... 31 more


이것도 마찬가지로 jdbc 드라이버 문제인데 postgresql-8.4-701.jdbc3로 맞춰주면 해결된다.



AND