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_transactionsis 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 FAMILYon 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_dumpallfile (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 SYSTEMand 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 … CASCADEon a type or extension also drops the table columns that use it, with their data.
Privileges and requirements
- Logs need the
pg_monitorandpg_read_server_filesroles (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
pldbgapiextension andplugin_debuggerinshared_preload_libraries(Debugger). - phpPgAdmin must be served from the root of a host name, not a sub-path (Installation).
Sessions
localhostand127.0.0.1are separate saved servers, each with its own settings and history (Saved servers).