2012-01-25 10 views
10

En psql, si 'SELECT * FROM usuario tipos uno obtendrá algo como lo siguiente vuelta:postgres: ¿Qué está haciendo realmente la consulta 'select * from user'?

current_user 
-------------- 
postgres 

¿Cuál es el usuario en este contexto?

+1

'selecto usuario;' devuelve el mismo conjunto de resultados y haciendo 'Seleccionar usuario, * desde some_table;' devuelve una columna adicional llamada 'current_user' al conjunto de resultados. Entonces se comporta muy extraño para mí. –

+0

Aunque el mismo comportamiento ocurre con 'current_timestamp'. Guess postgres es muy flexible en cuanto a cómo puedes usar las funciones. –

+1

@MartinSmith: ¿Flexible? ¿Puedes usar 'SELECT user()'? –

Respuesta

16

En este contexto, user es una función reservada Postgres que representa al usuario que ha iniciado sesión a la base de datos.

Esta consulta también se puede escribir como:

SELECT user;

cual debería producir la misma cosa. Atención, si desea hacer referencia realidad o crear una tabla llamada user que tendrá que usar comillas, o totalmente calificar el esquema que vive en, por ejemplo:.

CREATE TABLE "user" 
(
    id int2 not null 
); 

funciona, pero:

CREATE TABLE user 
(
    id int2 not null 
); 

Producirá un error.

Aquí es una referencia para otras funciones de información del sistema:

http://www.postgresql.org/docs/9.0/static/functions-info.html

+0

(Curioso porque tengo poco conocimiento de Postgres :) ¿Es una variable interna o una tabla interna? documentación –

+0

Los Postgres para 'user' [es aquí] (http://www.postgresql.org/docs/9.1/static/functions-info.html) –

+0

Ack! Estaba a punto de publicar ese enlace .. Voy a actualizar :) –

3

consulte la documentación de PostgreSQL en system functions.

Básicamente "select * from user" es una de las formas específicas de PostgreSQL encontrar el usuario actual. Funcionalmente es lo mismo que usar la función current_user por ejemplo: "select current_user()".

Otras funciones especiales que se pueden utilizar como tablas de consultas incluyen:

current_catalog 
current_schema 
+0

En realidad. No creo que haya nada especial sobre esas funciones (aparte de no requerir paréntesis). 'SELECT' es [definido como aceptar un nombre de función] (http://www.postgresql.org/docs/8.0/static/sql-select.html). p.ej. 'SELECT * from version();' funciona bien. –

1

Si usted está buscando para la lista de usuarios que debería buscar en la tabla pg_user; SELECCIONAR * FROM pg_user;

Su Consulta obtener todos los datos de resultado de la función de usuario especial llamado. Esa función devuelve el nombre de usuario de current_user.

Cuestiones relacionadas