[
https://issues.apache.org/jira/browse/CONNECTORS-1642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17105367#comment-17105367
]
Karl Wright commented on CONNECTORS-1642:
-----------------------------------------
The full code of the current method is the following:
{code}
/** Get a table's schema.
*@param tableName is the name of the table.
*@param cacheKeys are the keys against which to cache the query, or null.
*@param queryClass is the name of the query class, or null.
*@return a map of column names and ColumnDescription objects, describing the
schema, or null if the
* table doesn't exist.
*/
@Override
public Map<String,ColumnDescription> getTableSchema(String tableName,
StringSet cacheKeys, String queryClass)
throws ManifoldCFException
{
StringBuilder query = new StringBuilder();
List list = new ArrayList();
query.append("SELECT pg_attribute.attname AS \"Field\",");
query.append("CASE pg_type.typname WHEN 'int2' THEN 'smallint' WHEN 'int4'
THEN 'int'");
query.append(" WHEN 'int8' THEN 'bigint' WHEN 'varchar' THEN 'varchar(' ||
pg_attribute.atttypmod-4 || ')'");
query.append(" WHEN 'text' THEN 'longtext'");
query.append(" WHEN 'bpchar' THEN 'char(' || pg_attribute.atttypmod-4 ||
')'");
query.append(" ELSE pg_type.typname END AS \"Type\",");
query.append("CASE WHEN pg_attribute.attnotnull THEN '' ELSE 'YES' END AS
\"Null\",");
query.append("CASE pg_type.typname WHEN 'varchar' THEN
substring(pg_attrdef.adsrc from '^(.*).*$') ELSE pg_attrdef.adsrc END AS
Default ");
query.append("FROM pg_class INNER JOIN pg_attribute ON
(pg_class.oid=pg_attribute.attrelid) INNER JOIN pg_type ON
(pg_attribute.atttypid=pg_type.oid) ");
query.append("LEFT JOIN pg_attrdef ON (pg_class.oid=pg_attrdef.adrelid AND
pg_attribute.attnum=pg_attrdef.adnum) ");
query.append("WHERE pg_class.relname=? AND pg_attribute.attnum>=1 AND NOT
pg_attribute.attisdropped ");
query.append("ORDER BY pg_attribute.attnum");
list.add(tableName);
IResultSet set = performQuery(query.toString(),list,cacheKeys,queryClass);
if (set.getRowCount() == 0)
return null;
// Digest the result
Map<String,ColumnDescription> rval = new
HashMap<String,ColumnDescription>();
int i = 0;
while (i < set.getRowCount())
{
IResultRow row = set.getRow(i++);
String fieldName = row.getValue("Field").toString();
String type = row.getValue("Type").toString();
boolean isNull = row.getValue("Null").toString().equals("YES");
boolean isPrimaryKey = false; //
row.getValue("Key").toString().equals("PRI");
rval.put(fieldName,new
ColumnDescription(type,isPrimaryKey,isNull,null,null,false));
}
return rval;
}
{code}
The query I got from StackOverflow or the Postgresql manual (can't remember
which) a decade ago. I think just replacing the query with a more modern
version would work but I have no idea what the more modern version would be.
Patches welcome.
> PostgreSQL Version >= 12.2 DB Initialization Problems
> -----------------------------------------------------
>
> Key: CONNECTORS-1642
> URL: https://issues.apache.org/jira/browse/CONNECTORS-1642
> Project: ManifoldCF
> Issue Type: Bug
> Components: Framework core
> Affects Versions: ManifoldCF 2.15
> Reporter: Uwe Wolfinger
> Assignee: Karl Wright
> Priority: Major
>
> when trying to run the "./executecommand.sh
> org.apache.manifoldcf.crawler.InitializeAndRegister" script, the following
> erro shows up and the initialization process stops:
> {{ WARNING: Illegal reflective access by org.postgresql.jdbc.TimestampUtils
> ([file:/home/suche/crawler/lib/postgresql-42.1.3.jar|file:///home/suche/crawler/lib/postgresql-42.1.3.jar])
> to field java.util.TimeZone.defaultTimeZone}}
> {{ WARNING: Please consider reporting this to the maintainers of
> org.postgresql.jdbc.TimestampUtils}}
> {{ WARNING: Use --illegal-access=warn to enable warnings of further illegal
> reflective access operations}}
> {{ WARNING: All illegal access operations will be denied in a future release}}
> {{ org.apache.manifoldcf.core.interfaces.ManifoldCFException: Database
> exception: SQLException doing query (42703): FEHLER: Spalte pg_attrdef.adsrc
> existiert nicht}}
> {{ Position: 447}}
> {{ at
> org.apache.manifoldcf.core.database.Database$ExecuteQueryThread.finishUp(Database.java:715)}}
> {{ at
> org.apache.manifoldcf.core.database.Database.executeViaThread(Database.java:741)}}
> {{ at
> org.apache.manifoldcf.core.database.Database.executeUncachedQuery(Database.java:803)}}
> {{ at
> org.apache.manifoldcf.core.database.Database$QueryCacheExecutor.create(Database.java:1457)}}
> {{ at
> org.apache.manifoldcf.core.cachemanager.CacheManager.findObjectsAndExecute(CacheManager.java:146)}}
> {{ at
> org.apache.manifoldcf.core.database.Database.executeQuery(Database.java:204)}}
> {{ at
> org.apache.manifoldcf.core.database.DBInterfacePostgreSQL.performQuery(DBInterfacePostgreSQL.java:837)}}
> {{ at
> org.apache.manifoldcf.core.database.DBInterfacePostgreSQL.getTableSchema(DBInterfacePostgreSQL.java:696)}}
> {{ at
> org.apache.manifoldcf.core.database.BaseTable.getTableSchema(BaseTable.java:185)}}
> {{ at
> org.apache.manifoldcf.agents.agentmanager.AgentManager.install(AgentManager.java:67)}}
> {{ at
> org.apache.manifoldcf.agents.system.ManifoldCF.installTables(ManifoldCF.java:112)}}
>
> the column "pg_attrdef.adsrc" no longer exists in PostgreSQL DB 12.2.
> [https://www.postgresql.org/docs/11/catalog-pg-attrdef.html]
> which means that it is impossible to initialize the core DB in a PostgreSQL
> 12.2
--
This message was sent by Atlassian Jira
(v8.3.4#803005)