Let's start by just doing two tables first:
CREATE DATABASE
postgres=# \c gmovies; ^
gmovies=# create table history (id int constraint pk primary key, date date, text varchar(2048), genre int, info int, watcher int, role int, active boolean);
CREATE TABLE
gmovies=# insert into history(id, date, text, genre, info, watcher, role, active)
gmovies-# values(1, '2017-12-23', 'A nightmare before grav-mass', 1, 1, 1, 1, true);
INSERT 0 1
gmovies=# select * from history;
id | date | text | genre | info | watcher | role | active
----+------------+------------------------------+-------+------+---------+------+--------
1 | 2017-12-23 | A nightmare before grav-mass | 1 | 1 | 1 | 1 | t
(1 row)
So that takes care of our first table, with just one fictitious (but free as in freedom, and respectful of the viewers freedoms) movie.
Now we move on to the information:
gmovies=# create table info (id int constraint pk_info primary key, text varchar(2048));
CREATE TABLE
gmovies=# insert into info(1, 'A terrible tale of the Non-Free spirit of user enslavement, as told by acclaimed director Richard "Maestro" Stallman');
ERROR: syntax error at or near "1"
LINE 1: insert into info(1, 'A terrible tale of the Non-Free spirit ...
^
gmovies=# insert into info(id, text) values (1, 'A terrible tale of the Non-Free spirit of user enslavement, as told by acclaimed director Richard "Maestro" Stallman');
INSERT 0 1
gmovies=#
What we want to do, is to grab movie #1, and join any row from info, where history.info matches info.id.
gmovies=# select * from
gmovies-# history inner join info on (history.info = info.id);
gmovies=#
I have omitted the output, because it's massive.
Next we'll do the other tables.