[`inet_client_addr()` is a system information function.][1] It is located in the schema `pg_catalog` like other built-in functions (except for additional modules). `pg_catalog` is automatically part of the [`search_path`][2]. [Per documentation:][3] > In addition to `public` and user-created schemas, each database contains > a `pg_catalog` schema, which contains the system tables and all the > built-in data types, functions, and operators. `pg_catalog` is always > effectively part of the search path. If it is not named explicitly in > the path then it is implicitly searched before searching the path's > schemas. This ensures that built-in names will always be findable. > However, **you can explicitly place `pg_catalog` at the end of your search > path if you prefer to have user-defined names override built-in names.** Bold emphasis mine. So we create a dedicated schema and place it *before* `pg_catalog` in the `search_path`: CREATE SCHEMA override; CREATE OR REPLACE FUNCTION override.inet_client_addr() RETURNS inet AS $func$ SELECT '127.0.0.1'::inet $func$ language sql STABLE; <pre><code>SET search_path = <b>override, pg_catalog</b>, public; </code></pre> Then your call finds your custom override-function first: SELECT inet_client_addr(); [SQL Fiddle][4] Make sure, unprivileged users cannot create objects in the `override` schema, or they can play all kinds of tricks on you. That's not the case by default. [Per documentation:][5] > No privileges are granted to PUBLIC by default on tables, columns, **schemas** or tablespaces. Bold emphasis mine. Care is needed if the same user should be allowed to **create objects** in the database. [Per documentation:][6] > The first schema named in the search path is called the current > schema. Aside from being the first schema searched, it is also the > schema in which new tables will be created if the `CREATE TABLE` command > does not specify a schema name. Always specify a schema name for `CREATE` commands, and disallow crating object to *all* by default to rule out mistakes. [1]: http://www.postgresql.org/docs/current/interactive/functions-info.html [2]: http://stackoverflow.com/questions/9067335/how-to-create-table-inside-specific-schema-by-default-in-postgres/9067777#9067777 [3]: http://www.postgresql.org/docs/current/interactive/ddl-schemas.html#DDL-SCHEMAS-CATALOG [4]: http://sqlfiddle.com/#!15/037e8/1 [5]: http://www.postgresql.org/docs/current/interactive/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS [6]: http://www.postgresql.org/docs/current/interactive/ddl-schemas.html#DDL-SCHEMAS-PATH