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?
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?
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
(Curioso porque tengo poco conocimiento de Postgres :) ¿Es una variable interna o una tabla interna? documentación –
Los Postgres para 'user' [es aquí] (http://www.postgresql.org/docs/9.1/static/functions-info.html) –
Ack! Estaba a punto de publicar ese enlace .. Voy a actualizar :) –
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
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. –
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.
'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í. –
Aunque el mismo comportamiento ocurre con 'current_timestamp'. Guess postgres es muy flexible en cuanto a cómo puedes usar las funciones. –
@MartinSmith: ¿Flexible? ¿Puedes usar 'SELECT user()'? –