[FIX] base: avoid creating a new index at each model initialization
As example, on a runbot database, there are 13 duplicated indexes
```
4362411-14-0-all=> \d res_users_apikeys;
Table "public.res_users_apikeys"
Column | Type | Collation | Nullable | Default
-------------+-----------------------------+-----------+----------+-----------------------------------------------
id | integer | | not null | nextval('res_users_apikeys_id_seq'::regclass)
name | character varying | | not null |
user_id | integer | | not null |
scope | character varying | | |
index | character varying(8) | | |
key | character varying | | |
create_date | timestamp without time zone | | | timezone('utc'::text, now())
Indexes:
"res_users_apikeys_pkey" PRIMARY KEY, btree (id)
"res_users_apikeys_user_id_index_idx" btree (user_id, index)
"res_users_apikeys_user_id_index_idx1" btree (user_id, index)
"res_users_apikeys_user_id_index_idx10" btree (user_id, index)
"res_users_apikeys_user_id_index_idx11" btree (user_id, index)
"res_users_apikeys_user_id_index_idx12" btree (user_id, index)
"res_users_apikeys_user_id_index_idx2" btree (user_id, index)
"res_users_apikeys_user_id_index_idx3" btree (user_id, index)
"res_users_apikeys_user_id_index_idx4" btree (user_id, index)
"res_users_apikeys_user_id_index_idx5" btree (user_id, index)
"res_users_apikeys_user_id_index_idx6" btree (user_id, index)
"res_users_apikeys_user_id_index_idx7" btree (user_id, index)
"res_users_apikeys_user_id_index_idx8" btree (user_id, index)
"res_users_apikeys_user_id_index_idx9" btree (user_id, index)
Check constraints:
"res_users_apikeys_index_check" CHECK (char_length(index::text) = 8)
Foreign-key constraints:
"res_users_apikeys_user_id_fkey" FOREIGN KEY (user_id) REFERENCES res_users(id)
```
closes odoo/odoo#58746
X-original-commit: 94068037fbddc816926af7c68c19780926832722
Signed-off-by: Christophe Simonis <chs@odoo.com>
This commit is contained in:
@@ -1614,7 +1614,7 @@ class APIKeys(models.Model):
|
||||
key varchar not null,
|
||||
create_date timestamp without time zone DEFAULT (now() at time zone 'utc')
|
||||
);
|
||||
CREATE INDEX ON {table} (user_id, index);
|
||||
CREATE INDEX IF NOT EXISTS res_users_apikeys_user_id_index_idx ON {table} (user_id, index);
|
||||
""".format(table=self._table, index_size=INDEX_SIZE))
|
||||
|
||||
@check_identity
|
||||
|
||||
Reference in New Issue
Block a user