Probably simplest with `regclass` as input and an `OUT` parameter: ``` CREATE OR REPLACE FUNCTION f_last_update(_tbl regclass, OUT _last_update timestamp) LANGUAGE plpgsql AS $func$ BEGIN EXECUTE 'SELECT max(updated_at) FROM ' || _tbl INTO _last_update; END $func$; ``` Call: SELECT f_last_update('mytable'); Optionally schema-qualified and double-quoted where required: SELECT f_last_update('"My_odd_ScHeMa"."Unwise table name"'); Safe against SQL injection because `regclass` is automatically quoted and schema-qualified properly when converted to `text`. See: - [Table name as a PostgreSQL function parameter][1] - https://dba.stackexchange.com/questions/280724/find-tables-with-columns-with-empty-and-null-values-in-postgresql/280765#280765 - https://dba.stackexchange.com/questions/81966/check-whether-empty-strings-are-present-in-character-type-columns/82030#82030 [1]: https://stackoverflow.com/a/10711349/939860