postgresql

Inheritance

Remarks#

An explanation as to why you would want to use inheritance in PostgreSQL is available here: https://stackoverflow.com/a/3075248/653378

Creating children tables

CREATE TABLE users (username text, email text);
CREATE TABLE simple_users () INHERITS (users);
CREATE TABLE users_with_password (password text) INHERITS (users);

Our three tables look like this:

users

Column Type
username text
email text

simple_users

Column Type
username text
email text

users_with_password

Column Type
username text
email text
password text

Altering tables

Let’s create two simple tables:

CREATE TABLE users (username text, email text);
CREATE TABLE simple_users () INHERITS (users);

Adding columns

ALTER TABLE simple_users ADD COLUMN password text;

simple_users

Column Type
username text
email text
password text

Adding the same column to the parent table will merge the definition of both columns:

ALTER TABLE users ADD COLUMN password text;

NOTICE: merging definition of column “password” for child “simple_users”

Dropping columns

Using our altered tables:

ALTER TABLE users DROP COLUMN password;

users

Column Type
username text
email text

simple_users

Column Type
username text
email text
password text

Since we first added the column to simple_users, PostgreSQL makes sure this column isn’t dropped.

Now if we had another child table, its password column would, of course, have been dropped.


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow