Question: Is it possible to create a user in PostgreSQL without providing the plain text password (ideally, I would like to be able to create a user providing only its password crypted with sha-256) ?

What I would like to do is to create a user with something like that :

```
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';

```

Is there some way to do that ?

Thank you for your help.

Answer: 
You may provide the password already hashed with `md5`, as said in the doc ([CREATE ROLE](http://www.postgresql.org/docs/9.2/static/sql-createrole.html)):

> 
> ENCRYPTED UNENCRYPTED These key words control whether the password is
>  stored encrypted in the system catalogs. (If neither is specified, the
>  default behavior is determined by the configuration parameter
>  password\_encryption.) **If the presented password string is already in
>  MD5-encrypted format, then it is stored encrypted as-is**, regardless of
>  whether ENCRYPTED or UNENCRYPTED is specified (since the system cannot
>  decrypt the specified encrypted password string). This allows
>  reloading of encrypted passwords during dump/restore.
> 
> 
> 

The information that's missing here is that the MD5-encrypted string should be the password concatened with the username, plus `md5` at the beginning.

So for example to create `u0` with the password `foobar`, knowing that `md5('foobaru0')` is `ac4bbe016b808c3c0b816981f240dcae`:

```
CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';

```

and then u0 will be able to log in by typing `foobar` as the password.

I don't think that there's currently a way to use `SHA-256` instead of `md5` for PostgreSQL passwords.
I'm not aware of a way to override the default md5 encryption of passwords, but if you have a ROLE (aka "USER") that has an already md5-encrypted password it appears that you can supply that. Verify this using pg\_dumpall -g (to see the globals from the cluster)
Eg.

```
psql postgres
create role foo with encrypted password foobar;
\q

-- View the role from pg_dumpall -g
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

Or get it from:
select * from pg_catalog.pg_shadow;

-- create the role again with the already-encrypted password
psql postgres
drop role foo;
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';
\q

-- view the ROLE with the same password
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

```

Docs for [CREATE ROLE](http://www.postgresql.org/docs/current/static/sql-createrole.html)