I need to validate table schema using JDBC/Java. In MySQL and H2, I can issue the following query:
SHOW COLUMNS FROM City;
which has the output
+------------+----------+------+-----+---------+----------------+
| COLUMN_NAME| TYPE     | Null | KEY | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | NO   |     |         |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | NO   |     | 0       |                |
+------------+----------+------+-----+---------+----------------+
I am only interested in the columns COLUMN_NAME, TYPE and KEY
However, PostgreSQL does not support this query. I tried various combinations based on this post such as the following, but I get weird results.
SELECT c.COLUMN_NAME as COLUMN_NAME, c.DATA_TYPE as TYPE, 
CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRI' ELSE '' END AS KEY
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN (
            SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME
            FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku
                ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
                AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME
         )   pk 
ON  c.TABLE_CATALOG = pk.TABLE_CATALOG
            AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA
            AND c.TABLE_NAME = pk.TABLE_NAME
            AND c.COLUMN_NAME = pk.COLUMN_NAME
WHERE c.TABLE_NAME = 'City'
Can anyone help with the correct SQL.
EDIT: Problem solved. I was getting no entries for some tables while the correct ones for some. It was a problem with using uppercase in the table name. I used lower case city and it worked fine. 
 
     
    