Como instalo o pgcrypto no PostgreSQL 8.4?

23

Estou usando o Ubuntu Server 10.10 e instalei o PostgreSQL 8.4 usando apt-get install postgresql. Gostaria de usar a sha1()função interna, mas parece que tenho que instalar pgcryptoprimeiro. Mas não sei como instalá-lo.

Não há pgcryptose eu tentar instalá-lo usando apt-get install pgcryptoe não encontrar nenhum arquivo começando pgcryptono meu sistema (tentei find / -name "pgcrypto*").

Como instalo o pgcrypto para que eu possa usar a digest('word-to-hash','sha1')função nas minhas consultas ao banco de dados?


Atualização: Estou com dificuldades para instalar o pgcrypto em outra máquina Ubuntu. Após instalar o pacote usando sudo apt-get install postgresql-contrib-8.4como instalá-lo no meu banco de dados PostgreSQL atual?

Jonas
fonte
Oi @Jonas, não tenho certeza se você está tendo problemas para instalar o pgcrypto ou se está tendo problemas para fazê-lo funcionar com a instalação do db. Parece que você tem um problema de repo. Verifique se esse arquivo existe neste caminho /usr/local/pgsql/share/contrib/pgcrypto.sqle informe-nos.
jcolebrand
@ jcolebrand: Não, eu não tenho um /usr/local/pgsqldiretório. O único lugar em que tenho *.sqlarquivos está, /usr/share/postgresql/8.4/mas não relacionado a criptografia.
Jonas

Respostas:

17

Para a versão mais recente do PG, confira a resposta abaixo por Dustin Kirkland

É um módulo externo para o Postgres. Você deve instalar o postgresql-contrib-8.4pacote (ou sua versão pg) via apt:

apt-get install postgresql-contrib-8.4

Em seguida, você encontra o arquivo de instalação sql em algum lugar da /usr/share/postgresqlpasta e precisará executar pgcryto.sqlno banco de dados.

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

Ou,

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

    database=# \i pgcrypto.sql
DrColossos
fonte
Quando eu executo sudo apt-get install postgres-contribeu receboE: Unable to locate package postgres-contrib
Jonas
Eu pesquisei no Google e agora eu o instalei sudo apt-get install postgresql-contrib-8.4e executei \i <path-to-pgcrypto>usando psql.
Jonas
É assim que se faz. Eu ligeiramente atualizou a resposta para incluir a nota sobre a versão para o pacote
DrColossos
1
Ah, o comando foi\i /usr/share/postgresql/8.4/contrib/pgcypto.sql
Jonas
9
No postgresql 9.1, você digita na linha de comando: CREATE EXTENSION pgcrypto
Danubian Sailor
19

PostgreSQL 9.1+

Note que estou trabalhando no Ubuntu 12.04, que usa o postgresql 9.1.

Lá, eu precisava:

sudo apt-get install postgresql-contrib

E então no meu banco de dados:

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

E agora eu posso usar a funcionalidade 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
fonte
Eu realmente gosto desta resposta, embora você deva ter respondido a uma pergunta do 9.1+ (quando esse recurso foi adicionado). Como o OP pediu claramente o 8.4 e sua versão não suporta CREATE EXTENSION (o que torna a outra resposta estritamente correta
Evan Carroll
0

Para a versão mais recente, não há final do caminho do arquivo com pgcrypto.sql.

Crie uma extensão pgcrypto sob o usuário necessário.

$ 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=> 

Se for o caso, o usuário não tem permissão para criar uma extensão, conceda permissão ao superusuário fazendo login como usuário do postgres (padrão) e tente novamente.

$ 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
fonte