Cómo crear GUID en formato de Windows en Postgres 9.0+?

Traté de función

CREATE or REPLACE FUNCTION public.getguid() RETURNS varchar AS $BODY$ 
DECLARE 
  v_seed_value varchar(32); 
BEGIN 
  select 
    md5( 
      inet_client_addr()::varchar || 
      timeofday() || 
      inet_server_addr()::varchar || 
      to_hex(inet_client_port()) 
    ) 
  into v_seed_value; 

  return (substr(v_seed_value,1,8) || '-' || 
          substr(v_seed_value,9,4) || '-' || 
          substr(v_seed_value,13,4) || '-' || 
          substr(v_seed_value,17,4) || '-' || 
          substr(v_seed_value,21,12)); 
END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;

de

http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html

Intentado

select getguid()
union all
select getguid()

pero devuelve los mismos valores

"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"

Cómo solucionar este problema por lo que es único, se devuelven las filas?

InformationsquelleAutor Andrus | 2015-07-06

1 Comentario

  1. 18

    PostgreSQL tiene la uuid-ossp extensión que se suministra con el estándar de las distribuciones y tiene 5 algoritmos estándar para la generación de uuids. Tenga en cuenta que un guid es la versión de Microsoft de un uuid, conceptualmente son la misma cosa.

    CREATE EXTENSION "uuid-ossp";

    A continuación:

    SELECT uuid_generate_v4();

    Nota también de que, una vez instalada la extensión, PostgreSQL tiene un binario real uuid tipo, con una longitud de 16 bytes. Trabajar con el tipo binario es mucho más rápido que trabajar con el texto equivalente y que ocupa menos espacio. Si usted necesita la versión de la cadena, usted puede simplemente echó a text:

    SELECT uuid_generate_v4()::text;
    • Traté de CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA public pero ha obtenido un error could not open extension control file "/usr/pgsql-9.3/share/extension/uuid-ossp.control": No such file or directory . ¿Cómo solucionar ? El uso estándar de la distribución en "PostgreSQL 9.3.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3), 64-bit"
    • Que es extraño, porque el módulo debe ser incluido en el estándar de la distribución en su lugar. Usted podría tratar de CREATE EXTENSION pgcrypto que crea la función gen_random_uuid() que devuelve un v4 uuid.
    • Lo intenté, pero ha obtenido un error could not open extension control file "/usr/pgsql-9.3/share/extension/pgcrypto.control": No such file or directory tal vez algo se tiene instalado en el servidor ?
    • Su instalación es bastante obvio que no estándar. Intente localizar la *.control archivos en su sistema de archivos con el find comando y, a continuación, mover todo el contenido del directorio donde se encuentran estos archivos a través de /usr/pgsql-9.3/share/extension.
    • Sólo hay un archivo de control de /usr/pgsql-9.3/share/extension/plpgsql.control y parece estar en el lugar adecuado. Repo lista contiene la línea de baseurl=http://yum.postgresql.org/9.3/redhat/rhel-$releasever-$basearch. Parece que esto se utiliza para la instalación. Tal vez algún comando yum puede utilizar para agregar otras extensiones ?
    • En Windows server ERROR: could not load library "C:/Program Files/PostgreSQL/9.3/lib/uuid-ossp.dll": The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail. Error occurs for this command
    • Tuve que correr yum install postgresql93-contrib para obtener el uuid-ossp extensión instalada en un CentOS 6.7 de la máquina. Por lo que he encontrado en la documentación de Postgres pgcrypto puede generar Uuid del 9,4 o más tarde.

Dejar respuesta

Please enter your comment!
Please enter your name here