Chez 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 voir, l' uuid-ossp
extension 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 ça?
postgresql
amazon-web-services
amazon-ec2
ア レ ッ ク ス
la source
la source
Réponses:
L'extension est disponible mais pas installée dans cette base de données.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
la source
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
\c <db name>
dans la console pgsqlSi l'extension est déjà là mais que vous ne voyez pas la fonction uuid_generate_v4 () lorsque vous exécutez une commande describe functions \ df, tout ce que vous avez à faire est de supprimer l'extension et de la rajouter pour que les fonctions soient é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 s'est probablement passé, c'est que l'extension a été initialement ajoutée au cluster à un moment donné dans le passé, puis vous avez probablement créé une nouvelle base de données dans ce cluster par la suite. Si tel était le cas, alors la nouvelle base de données ne sera "consciente" que de l'extension mais elle n'aura pas les fonctions uuid ajoutées, ce qui se produit lorsque vous ajoutez l'extension. Par conséquent, vous devez le rajouter.
la source
Il semble 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
Ensuite, installez l'extension dans cette base de données
CREATE EXTENSION "uuid-ossp";
la source
Cela a fonctionné pour moi.
create extension IF NOT EXISTS "uuid-ossp" schema pg_catalog version "1.1";
assurez-vous que l'extension doit figurer sur pg_catalog et non dans votre schéma ...
la source
Si vous avez modifié le
search_path
, spécifiez le schéma public sur la fonction:la source
si vous le faites à partir de la commande unix (en dehors 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 des requêtes sur ce DB
psql -d -c "créer une EXTENSION pgcrypto;"
la source
# 1 Réinstallez l'extension uuid-ossp dans un schéma exact:
SET search_path TO public; DROP EXTENSION IF EXISTS "uuid-ossp"; CREATE EXTENSION "uuid-ossp" SCHEMA public;
S'il s'agit d'une nouvelle installation, vous pouvez ignorer
SET
etDROP
. Crédits à @atomCode ( détails )Après cela, vous devriez voir la fonction uuid_generate_v4 () dans le schéma de droite (lors de l'exécution de la
\df
requête dans l' invite de ligne de commande psql ) .# 2 Utilisez des noms complets (avec
schemaname.
qualificatif):CREATE TABLE public.my_table ( id uuid DEFAULT public.uuid_generate_v4() NOT NULL,
la source