Files
odoo_source/odoo/addons/base/data/base_data.sql
T
Fabien Pinckaers e045e76e35 [IMP] base: reduce new DB size by ordering columns
Postgres is aligning columns to 4 or 8 bytes, depending on their type.
So, consecutive fixed-length columns of differing size will be padded
with empty bytes due to the alignment requirements.

Before this patch, columns where created in their definition order. Now,
they are ordered based on their size, in order to minimize the padding.

As an example, before each row uses 36 bytes (+24b header):

       attname   |  typname  | typlen
    -------------+-----------+--------
     id          | int4      |      4
     create_uid  | int4      |      4
     create_date | timestamp |      8
     write_uid   | int4      |      4    -> 4 bytes padding
     write_date  | timestamp |      8
     active      | bool      |      1    -> 3 bytes padding

After each row uses 32 bytes (4 bytes saved per row):

       attname   |  typname  | typlen
    -------------+-----------+--------
     id          | int4      |      4
     create_uid  | int4      |      4
     write_uid   | int4      |      4
     active      | bool      |      1    -> 3 bytes padding
     create_date | timestamp |      8
     write_date  | timestamp |      8

This saving scheme applies to all rows in all tables. We save between 4
and 8 bytes per row just on the usual create_uid, create_date,
write_uid, write_date.

closes odoo/odoo#87896

Signed-off-by: Raphael Collet <rco@odoo.com>
2022-04-05 17:17:27 +02:00

145 lines
5.1 KiB
SQL

-------------------------------------------------------------------------
-- Pure SQL
-------------------------------------------------------------------------
CREATE TABLE ir_actions (
id serial,
primary key(id)
);
CREATE TABLE ir_act_window (primary key(id)) INHERITS (ir_actions);
CREATE TABLE ir_act_report_xml (primary key(id)) INHERITS (ir_actions);
CREATE TABLE ir_act_url (primary key(id)) INHERITS (ir_actions);
CREATE TABLE ir_act_server (primary key(id)) INHERITS (ir_actions);
CREATE TABLE ir_act_client (primary key(id)) INHERITS (ir_actions);
CREATE TABLE res_users (
id serial NOT NULL,
-- No FK references below, will be added later by ORM
-- (when the destination rows exist)
company_id integer, -- references res_company,
partner_id integer, -- references res_partner,
active boolean default True,
create_date timestamp without time zone,
login varchar(64) NOT NULL UNIQUE,
password varchar default null,
primary key(id)
);
CREATE TABLE res_groups (
id serial NOT NULL,
name varchar NOT NULL,
primary key(id)
);
CREATE TABLE ir_module_category (
id serial NOT NULL,
create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
write_uid integer, -- references res_users on delete set null,
parent_id integer REFERENCES ir_module_category ON DELETE SET NULL,
name character varying NOT NULL,
primary key(id)
);
CREATE TABLE ir_module_module (
id serial NOT NULL,
create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
write_uid integer, -- references res_users on delete set null,
website character varying,
summary character varying,
name character varying NOT NULL,
author character varying,
icon varchar,
state character varying(16),
latest_version character varying,
shortdesc character varying,
category_id integer REFERENCES ir_module_category ON DELETE SET NULL,
description text,
application boolean default False,
demo boolean default False,
web boolean DEFAULT FALSE,
license character varying(32),
sequence integer DEFAULT 100,
auto_install boolean default False,
to_buy boolean default False,
primary key(id)
);
CREATE TABLE ir_module_module_dependency (
id serial NOT NULL,
create_uid integer, -- references res_users on delete set null,
create_date timestamp without time zone,
write_date timestamp without time zone,
write_uid integer, -- references res_users on delete set null,
name character varying,
module_id integer REFERENCES ir_module_module ON DELETE cascade,
auto_install_required boolean DEFAULT true,
primary key(id)
);
CREATE TABLE ir_model_data (
id serial NOT NULL,
create_uid integer,
create_date timestamp without time zone DEFAULT (now() at time zone 'UTC'),
write_date timestamp without time zone DEFAULT (now() at time zone 'UTC'),
write_uid integer,
res_id integer,
noupdate boolean DEFAULT False,
name varchar NOT NULL,
module varchar NOT NULL,
model varchar NOT NULL,
primary key(id)
);
CREATE TABLE res_currency (
id serial,
name varchar NOT NULL,
symbol varchar NOT NULL,
primary key(id)
);
CREATE TABLE res_company (
id serial,
name varchar NOT NULL,
partner_id integer,
currency_id integer,
sequence integer,
create_date timestamp without time zone,
primary key(id)
);
CREATE TABLE res_partner (
id serial,
company_id integer,
create_date timestamp without time zone,
name varchar,
primary key(id)
);
---------------------------------
-- Default data
---------------------------------
insert into res_currency (id, name, symbol) VALUES (1, 'EUR', '€');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('EUR', 'base', 'res.currency', true, 1);
select setval('res_currency_id_seq', 1);
insert into res_company (id, name, partner_id, currency_id, create_date) VALUES (1, 'My Company', 1, 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_company', 'base', 'res.company', true, 1);
select setval('res_company_id_seq', 1);
insert into res_partner (id, name, company_id, create_date) VALUES (1, 'My Company', 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('main_partner', 'base', 'res.partner', true, 1);
select setval('res_partner_id_seq', 1);
insert into res_users (id, login, password, active, partner_id, company_id, create_date) VALUES (1, '__system__', NULL, false, 1, 1, now() at time zone 'UTC');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('user_root', 'base', 'res.users', true, 1);
select setval('res_users_id_seq', 1);
insert into res_groups (id, name) VALUES (1, 'Employee');
insert into ir_model_data (name, module, model, noupdate, res_id) VALUES ('group_user', 'base', 'res.groups', true, 1);
select setval('res_groups_id_seq', 1);