Skip to content

Known limitations ​

This page collects what phpPgAdmin does not do yet, and the behaviour that most often surprises people coming from phpMyAdmin or pgAdmin. Each item links to the page that covers it in detail. Where the UI has no form for something, the SQL editor can always run the statement directly.

Not built yet ​

Controls for unbuilt features still appear, as they do in phpMyAdmin. Clicking one shows Not available yet. instead of doing anything; see Controls that are not built yet.

Server and databases ​

  • Prepared transactions are listed only when max_prepared_transactions is above 0, which needs a server restart (Status).
  • Renaming or removing a saved server from the login page logs you in to it first; server groups from a pgAdmin import are not kept (Signing in).

Tables ​

These options are not in the forms; use the SQL tab for them:

Other objects ​

  • Views: the create form has no storage options (Views).
  • Operator classes, families and conversions: created from a form, but not altered; a family's members are changed with ALTER OPERATOR FAMILY on the SQL tab (Types).

Export, import and tools ​

  • Export: a schema or database CSV export puts every table in one file; the directory format downloads as a tar file to extract before pg_restore (Export).
  • Import: restricted mode rejects backslash commands, so a pg_dumpall file (which uses \connect) cannot be imported. COPY text, binary and XML imports are only available for a single table; CSV at database or schema level creates a new table. ODS and the other phpMyAdmin formats are not offered (Import).
  • Debugger: in-context debugging stops only the first call of the routine after Set breakpoint, and cannot be limited to one session's PID (Debugger).
  • GIS visualization: no OpenStreetMap base layer and no PDF download; coordinates are drawn without a map projection (Visualize GIS data).
  • Schema diff: roles, tablespaces, the database's own settings and data are not compared (Schema diff). Another server must be one of the saved servers.

Behaviour to know about ​

The SQL tab's session ​

The SQL tab keeps one connection per database for as long as the browser tab is open, so SET, temporary tables and an open transaction carry over between runs. Closing the tab, or three minutes without its heartbeat, ends the session and rolls back an open transaction. With PGADMIN_QUERY_SESSIONS=0 or without background processes every run uses a fresh connection. The Browse grid, the console and the other pages still run each request on its own connection. A schema's SQL tab does not set search_path (Where the statements run).

Paging re-runs the query ​

A paged SELECT is wrapped in a subquery and run again for every page and for the row count, so volatile functions such as nextval() run more than once. Statements that cannot be wrapped, and the statements of a batch, return all their rows with no limit; paging a SELECT of a batch runs that SELECT alone, never the rest of the batch (How paging and ordering work).

PostgreSQL is not MySQL ​

  • New columns always go at the end of the table; PostgreSQL cannot place them (Adding columns).
  • Enum labels cannot be removed, and new labels go at the end (Enum types).
  • Changing a function's return type needs a drop and re-create. Changing an argument type creates a second function (an overload) instead of changing the existing one (Edit a routine).
  • CREATE INDEX CONCURRENTLY, VACUUM, ALTER SYSTEM and the subscription statements cannot run inside a transaction.
  • Some edits drop and re-create the object: views, materialized views (their indexes, grants and settings are re-created), domains when the base type changes, constraint triggers, languages, event triggers and servers when certain fields change. Each page says which fields do this.
  • DROP … CASCADE on a type or extension also drops the table columns that use it, with their data.

Privileges and requirements ​

  • Logs need the pg_monitor and pg_read_server_files roles (Server logs).
  • Non-superusers see only their own sessions on the Status tab (Status).
  • Event triggers, text search parsers and templates, and untrusted languages need a superuser.
  • Export, import and maintenance run the PostgreSQL client programs on the web server, which must be at least as new as the server (Configuration).
  • The debugger needs the pldbgapi extension and plugin_debugger in shared_preload_libraries (Debugger).
  • phpPgAdmin must be served from the root of a host name, not a sub-path (Installation).

Sessions ​

  • localhost and 127.0.0.1 are separate saved servers, each with its own settings and history (Saved servers).

Released under the MIT License.