Skip to content

PostgreSQL clients compatibility #2450

@auntyellow

Description

@auntyellow

Some popular PostgreSQL clients will send SQLs that cause exceptions:

pgAdmin

  • SET client_min_messages=notice
  • SELECT set_config('bytea_output','escape',false) FROM pg_settings WHERE name = 'bytea_output'
  • SET client_encoding='UNICODE'
  • SELECT version(), should return column header version but not public.version(), since pgAdmin reads row['version'], see connection.py L470
  • SELECT ... FROM pg_database db WHERE db.datname = current_database() (function current_database())
  • SELECT ..., rolsuper ... FROM pg_catalog.pg_roles WHERE rolname = current_user (column pg_roles.rolsuper)
  • SELECT ... FROM pg_database db LEFT OUTER JOIN pg_tablespace ta ON db.dattablespace = ta.oid WHERE db.oid > 100000::OID ORDER BY datname, got Data conversion error converting "INTEGER to BLOB" (::OID should be supported, and this query should return at least one row, otherwise pgAdmin cannot open SQL window)
  • SELECT ..., has_schema_privilege(nsp.oid, 'CREATE'), ... FROM pg_namespace nsp WHERE ... (function has_schema_privilege())
  • SELECT format_type(23, NULL), should return 'integer' but not null
  • SET LOCAL join_collapse_limit=8 (SESSION | LOCAL not supported)

HeidiSQL

  • SHOW ssl
  • SET search_path TO 'public', '$user' (single quote not supported)
  • SELECT *, NULL AS data_length, pg_relation_size(QUOTE_IDENT(t.TABLE_SCHEMA) || '.' || QUOTE_IDENT(t.TABLE_NAME))::bigint AS index_length, c.reltuples, obj_description(c.oid) AS comment FROM "information_schema"."tables" ... (function pg_relation_size(), obj_description())
  • SELECT DISTINCT a.attname AS column_name, ... FROM pg_attribute AS a JOIN pg_class AS pgc ON pgc.oid = a.attrelid WHERE ... AND pg_table_is_visible(pgc.oid) ... (function pg_table_is_visible())
  • SELECT "p"."proname", "p"."proargtypes" FROM "pg_catalog"."pg_namespace" ...
  • SELECT ... FROM "pg_constraint" AS "c" ... (table pg_constraint)
  • SHOW ALL

DBeaver

  • SELECT current_schema(),session_user (function session_user())
  • SELECT t.oid,t.*,c.relkind FROM pg_catalog.pg_type t LEFT OUTER JOIN pg_class c ON c.oid=t.typrelid WHERE typnamespace=$1 (column pg_type.typrelid)
  • SELECT ..., pg_get_expr(ad.adbin, ad.adrelid, true) ... FROM pg_catalog.pg_attribute a ... LEFT OUTER JOIN pg_catalog.pg_attrdef ad ON ... (function pg_get_expr needs to allow 3rd optional args)
  • SHOW search_path
  • SELECT ..., pg_catalog.pg_stat_get_numscans(i.indexrelid) ... FROM pg_catalog.pg_index i ... (function pg_stat_get_numscans)
  • SELECT ... FROM pg_catalog.pg_constraint c ... WHERE c.conrelid=$1 ORDER BY c.oid (table pg_constraint)
  • SELECT ... FROM pg_catalog.pg_type t JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid WHERE ... n.nspname = ANY (current_schemas(true)) ... (function current_schemas)
  • Above SQL (expression = ANY(ARRAY))

If H2 supports these features, these popular SQL clients can access H2 databases easily.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions