¿Cómo instalo pgcrypto en PostgreSQL 8.4?

23

Estoy usando Ubuntu Server 10.10 y he instalado PostgreSQL 8.4 usando apt-get install postgresql. Me gustaría usar la sha1()función incorporada, pero parece que pgcryptoprimero tengo que instalar . Pero no sé cómo instalarlo.

No existe pgcryptosi intento instalarlo usando apt-get install pgcryptoy no encuentro ningún archivo que comience pgcryptoen mi sistema (lo intenté find / -name "pgcrypto*").

¿Cómo instalo pgcrypto para poder usar la digest('word-to-hash','sha1')función en las consultas de mi base de datos?


Actualización: estoy luchando por instalar pgcrypto en otra máquina Ubuntu. Después de instalar el paquete usando, sudo apt-get install postgresql-contrib-8.4¿cómo lo instalo en mi base de datos PostgreSQL actual?

Jonas
fuente
Hola @Jonas, no estoy seguro de si tienes problemas para instalar pgcrypto o si tienes problemas para que funcione con tu instalación de db. Parece que tienes un problema de repositorio. Verifique que este archivo existe en esta ruta /usr/local/pgsql/share/contrib/pgcrypto.sqly háganos saber.
jcolebrand
@jcolebrand: No, no tengo un /usr/local/pgsqldirectorio. El único lugar donde tengo *.sqlarchivos es /usr/share/postgresql/8.4/pero no está relacionado con criptografía.
Jonas

Respuestas:

17

Para una versión más nueva de PG, mira la respuesta a continuación por Dustin Kirkland

Es un módulo externo para Postgres. Debe instalar el postgresql-contrib-8.4paquete (o su versión de pg) a través de apt:

apt-get install postgresql-contrib-8.4

Luego encontrará el archivo de instalación sql en algún lugar de la /usr/share/postgresqlcarpeta, y deberá ejecutarlo pgcryto.sqlen la base de datos.

psql -d <database> -f /usr/share/postgresql/8.4/contrib/pgcrypto.sql

O,

$ cd /usr/share/postgresql/8.4/contrib
$ psql -d <database>
    psql (8.4.8)
    Type "help" for help.

    database=# \i pgcrypto.sql
DrColossos
fuente
Cuando corro sudo apt-get install postgres-contribme saleE: Unable to locate package postgres-contrib
Jonas
Busqué en Google y ahora lo instalé usando sudo apt-get install postgresql-contrib-8.4y luego ejecuté \i <path-to-pgcrypto>usando psql.
Jonas
Esa es la manera de hacerlo.
Actualicé
1
Ah, la orden fue\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Jonas
99
En postgresql 9.1 escribe la línea de comando: CREATE EXTENSION pgcrypto
Danubian Sailor
19

PostgreSQL 9.1+

Tenga en cuenta que estoy trabajando en Ubuntu 12.04, que utiliza postgresql 9.1.

Allí, necesitaba:

sudo apt-get install postgresql-contrib

Y luego en mi base de datos:

postgres@ztrustee:~$ psql test
psql (9.1.3)
Type "help" for help.
test=# CREATE EXTENSION pgcrypto;
CREATE EXTENSION

Y ahora puedo usar la funcionalidad pgcrypto, gen_random_bytes ():

test=# create table test ( 
  id 
    text 
    not null 
    default encode( gen_random_bytes( 32 ), 'hex' ) 
    primary key, 
  value 
    text 
); 
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
test=# \d test
                            Table "public.test"
 Column | Type |                         Modifiers                          
--------+------+------------------------------------------------------------
 id     | text | not null default encode(gen_random_bytes(32), 'hex'::text)
 value  | text | 
Indexes:
    "test_pkey" PRIMARY KEY, btree (id)

test=# insert into test (value) VALUES ('scoobydoo');
INSERT 0 1
test=# select * from test;
                                id                                |   value   
------------------------------------------------------------------+-----------
 76dd5bd0120d3df797f932fbcb4f8aa5088e215ee2b920dddbff59c8595fbac7 | scoobydoo
Dustin Kirkland
fuente
Me gusta mucho esta respuesta, aunque debe tener auto-respondido a una pregunta de 9.1+ (cuando se añadió esta característica) A medida que la OP claramente pidió 8.4 y su versión no soporta CREATE EXTENSION (lo que hace la otra respuesta correcta en sentido estricto.
Evan Carroll
0

Para la última versión, no hay una ruta de archivo finalizada con pgcrypto.sql.

Cree una extensión pgcrypto con el usuario requerido.

$ psql -U <username> -d mydb

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

mydb=> CREATE EXTENSION pgcrypto;

CREATE EXTENSION
mydb=> 

Si en este caso, el usuario no tiene permiso para crear una extensión, otorgue permiso de superusuario iniciando sesión como usuario postgres (predeterminado) e intente nuevamente.

$ psql --u postgres

psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# ALTER USER <username> WITH SUPERUSER;

ALTER ROLE
Veeresh Digasangi
fuente