What is a PostgreSQL table owner?

I am unsure about what does a PostgreSQL table owner means. I notice that it changes an attribute of the table itself and not about the owner because it is specified through an

ALTER TABLE table_name OWNER TO role_name;

Solution 1:

You can see who is owner in certain table:

select * from pg_tables where tablename = 'my_tbl';

or you can see all tables by certain owner:

select * from pg_tables where tableowner = 'username';

Solution 2:

The owner is (if nothing else happened) the user (role) that created the table. So if user arthur runs create table foo (id integer), arthur owns the table.

The owner of a table has all privileges on it - including the privilege to drop it. Or the privilege to grant other users (roles) access to the table.

The SQL script generated by pg_dump typically includes the alter table ... owner to ... statement as those scripts are intended to be run by the DBA and in that case all tables would be owned by the DBA - which means the "real" owner could not change or access the tables.

Solution 3:

Some excerpts from the official docs:

When an object is created, it is assigned an owner. The owner is normally the role that executed the creation statement. For most kinds of objects, the initial state is that only the owner (or a superuser) can do anything with the object. To allow other roles to use it, privileges must be granted.

The right to modify or destroy an object is inherent in being the object's owner, and cannot be granted or revoked in itself. (However, like all privileges, that right can be inherited by members of the owning role; see Section 21.3.)

Ordinarily, only the object's owner (or a superuser) can grant or revoke privileges on an object.

An object's owner can choose to revoke their own ordinary privileges, for example to make a table read-only for themselves as well as others. But owners are always treated as holding all grant options, so they can always re-grant their own privileges.