Sur Amazon ec2 RDS Postgresql:
=> SHOW rds.extensions;
rds.extensions
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
btree_gin,btree_Gist,chkpass,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,ltree,pgcrypto,pgrowlocks,pg_trgm,plperl,plpgsql,pltcl,postgis,postgis_tiger_geocoder,postgis_topology,sslinfo,tablefunc,tsearch2,unaccent,uuid-ossp
(1 row)
Comme vous pouvez le constater, l’extension uuid-ossp
existe. Cependant, lorsque j'appelle la fonction pour la génération uuid_v4
, elle échoue:
CREATE TABLE my_table (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
name character varying(32) NOT NULL,
);
Quel est le problème avec cela?
L'extension est disponible mais pas installé dans cette base de données.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Si l'extension existe déjà mais que la fonction uuid_generate_v4 () ne s'affiche pas lorsque vous décrivez une fonction\ df, il vous suffira alors de supprimer l'extension et de l'ajouter de nouveau. que les fonctions sont également ajoutées. Voici la réplication du problème:
db=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------+------------------+---------------------+------
(0 rows)
CREATE EXTENSION "uuid-ossp";
ERROR: extension "uuid-ossp" already exists
DROP EXTENSION "uuid-ossp";
CREATE EXTENSION "uuid-ossp";
db=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+--------------------+------------------+---------------------------+--------
public | uuid_generate_v1 | uuid | | normal
public | uuid_generate_v1mc | uuid | | normal
public | uuid_generate_v3 | uuid | namespace uuid, name text | normal
public | uuid_generate_v4 | uuid | | normal
db=# select uuid_generate_v4();
uuid_generate_v4
--------------------------------------
b19d597c-8f54-41ba-ba73-02299c1adf92
(1 row)
Ce qui est probablement arrivé, c’est que l’extension a été ajoutée au cluster à un moment donné dans le passé et que vous avez ensuite probablement créé une nouvelle base de données au sein de ce cluster. Si tel était le cas, la nouvelle base de données ne sera que "consciente" de l'extension, mais les fonctions uuid ne seront pas ajoutées, ce qui se produit lorsque vous ajoutez l'extension. Par conséquent, vous devez l'ajouter à nouveau.
On dirait que l'extension n'est pas installée dans la base de données particulière dont vous avez besoin.
Vous devez vous connecter à cette base de données particulière avec
\CONNECT my_database
Puis installez l'extension dans cette base de données
CREATE EXTENSION "uuid-ossp";
si vous le faites à partir d'une commande unix (à l'exception de PGAdmin), n'oubliez pas de passer le DB en paramètre. sinon, cette extension ne sera pas activée lors de l'exécution de requêtes sur cette base de données.
psql -d -c "crée une EXTENSION pgcrypto;"