User Tools

Site Tools


proyecto:configurar_postgres

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
proyecto:configurar_postgres [2018/04/20 20:20] – created ahoganproyecto:configurar_postgres [2026/09/25 18:31] (current) – Lenguaje sin género en la guía del servidor semorale
Line 1: Line 1:
 ====== Configurar Postgres ====== ====== Configurar Postgres ======
  
-El usuario de Postgres, por defecto, se llama ''postgres'' y nuestro usuario es ''cc3201'', entonces si intentas con:+Su máquina ya tiene Postgres 17 instalado y funcionando, así que no hay que instalar nada. En esta página van a crear su usuario de Postgres, su base de datos y un esquema para las tablas del proyecto. Toma unos 10 minutos. 
 + 
 +Todos los comandos de esta página se ejecutan **dentro del servidor**, después de entrar por SSH (ver [[proyecto:acceso_al_servidor|Acceso al servidor]]). En los ejemplos usamos la máquina 40 y un esquema llamado ''peliculas''; ustedes usan su número de grupo y el nombre que quieran. 
 + 
 +===== Qué hay dentro de Postgres ===== 
 + 
 +Antes de empezar, conviene tener claro qué es cada cosa que vamos a crear: 
 + 
 +{{proyecto:servidor_postgres_por_dentro.png?direct&900|Roles, base de datos, esquemas y tablas en Postgres}} 
 + 
 +^ Término ^ Qué es ^ 
 +| **Postgres** (o PostgreSQL) | El sistema de bases de datos del curso. Es un programa que queda corriendo en su máquina y responde consultas SQL. | 
 +| **psql** | El cliente de Postgres para la terminal. Ahí se escribe SQL y se ven los resultados. | 
 +| **rol** | Una cuenta de Postgres. Es distinta de la cuenta de Linux, aunque aquí ambas se llamen ''cc3201''. | 
 +| **superusuario** | Un rol que puede hacer cualquier cosa en Postgres (crear bases, esquemas, otros roles). | 
 +| **base de datos** | Un contenedor de esquemas. Un mismo Postgres puede tener varias bases; ustedes van a usar una sola, ''cc3201''. | 
 +| **esquema** (//schema//) | Una carpeta de tablas dentro de una base. Sirve para agrupar las tablas del proyecto y no mezclarlas con otras. | 
 +| **search_path** | La lista de esquemas donde Postgres busca una tabla cuando no le dicen el esquema. | 
 + 
 +===== Paso 1: el error inicial ===== 
 + 
 +Si entran a ''psql'' recién llegados, falla:
  
 <code> <code>
Line 7: Line 28:
 </code> </code>
  
-dice+{{proyecto:servidor_pg_01_psql_sin_rol.png?direct&900|psql dice que el rol cc3201 no existe}}
  
-<code> +Esto es esperable. ''psql'' intenta entrar a Postgres con un rol del mismo nombre que su usuario de Linux (''cc3201''), y ese rol todavía no existe. Postgres viene solo con el rol de administración, que se llama ''postgres''. (La parte del //socket// del mensaje es la vía interna por la que ''psql'' habla con Postgres dentro de la misma máquina; no hay que hacer nada con eso.) 
-psql: FATAL:  role "cc3201" does not exist + 
-</code>+===== Paso 2: crear su rol y su base de datos =====
  
-Pero, dado que tenemos ''sudo'', podemos usar el siguiente comando (''su'': ''s''witch ''u''ser) para ingresar como el usuario ''postgres''.+Como tenemos ''sudo'', podemos cambiarnos al usuario ''postgres'' de Linux, que sí puede administrar Postgres (''su'': ''s''witch ''u''ser):
  
 <code> <code>
Line 19: Line 40:
 </code> </code>
  
-Entonces podemos crear un usuario para ''cc3201'' en Postgres:+''sudo'' pide la contraseña de SSH. La línea de comandos cambia a ''postgres@cc3201-XX:/home/cc3201$'', lo que indica que la sesión ahora es del usuario ''postgres'' de Linux. Entonces creamos el rol ''cc3201'' en Postgres:
  
 <code> <code>
Line 25: Line 46:
 </code> </code>
  
-La opción ''-s'' significa que ''cc3201'' será un //superuser// (como ''postgres'') que tiene poder administrativo. Y tenemos que crear una base de datos para el usuario;+La opción ''-s'' significa que ''cc3201'' será un //superuser// (como ''postgres''), así no van a tener problemas de permisos durante el proyecto. Ahora creamos una base de datos que se llame igual que el rol, con ''cc3201'' como dueño (''-O'' es //owner//):
  
 <code> <code>
Line 31: Line 52:
 </code> </code>
  
-Después, podemos salir de la cuenta de ''postgres'' y regresar al usuario ''cc3201'':+La base se llama igual que el rol porque ''psql'', si no le dicen otra cosa, entra a la base con el nombre del rol. Así basta con escribir ''psql'', sin opciones. 
 + 
 +Si ninguno de los dos comandos imprime nada, funcionaron. Después, salimos de la cuenta de ''postgres'' y volvemos al usuario ''cc3201'':
  
 <code> <code>
Line 37: Line 60:
 </code> </code>
  
-Ahora, podemos probar Postgres:+Así se ve el paso completo: 
 + 
 +{{proyecto:servidor_pg_02_crear_usuario.png?direct&830|Crear el rol y la base como usuario postgres}} 
 + 
 +===== Paso 3: probar Postgres y crear su esquema ===== 
 + 
 +Ahora ''psql'' debería funcionar:
  
 <code> <code>
 psql psql
 </code> </code>
 +
 +La línea de comandos cambia a ''cc3201=#''. El ''cc3201'' es la base en la que están y el ''#'' indica que son superusuario. Dentro de ''psql'', cada instrucción SQL termina en '';'' (si se les olvida, ''psql'' espera más texto y la línea cambia a ''cc3201-#''; escriban '';'' y Enter). Para salir de ''psql'', ''\q''.
 +
 +Para ver la versión:
  
 <code> <code>
Line 47: Line 80:
 </code> </code>
  
-Finalmente, podemos crear un esquema (//schema//), que es como un grupo de tablas (aquí hay que reemplazar ''<nombre>'' con el nombre del esquema que quieren tener):+Debería responder con una línea que empieza con ''PostgreSQL 17''. 
 + 
 +Luego creamos un esquema para las tablas del proyecto. Hay que reemplazar ''<nombre>'' con el nombre que quieran, en minúsculas y sin espacios ni tildes (por ejemplo ''peliculas''):
  
 <code> <code>
Line 53: Line 88:
 </code> </code>
  
-Para evitar tener que poner el esquema cada vez, se puede agregarlo al //path// del usuario:+Sin más, para usar una tabla del esquema habría que escribir siempre ''<nombre>.tabla''. Para no tener que hacerlo, agregamos el esquema al //search_path// del usuario:
  
 <code> <code>
Line 59: Line 94:
 </code> </code>
  
-Ahora, se puede dar solo el nombre de una tabla en el esquema y no el nombre del esquema (p.ej. no hay que poner cc3201=# ''SELECT * FROM <nombre>.tabla''; funciona con ''SELECT * FROM tabla'').+Esto le dice a Postgres: "cuando pida una tabla sin esquema, búscala primero en ''<nombre>'' y después en ''public''". También define dónde quedan las tablas nuevas, porque ''CREATE TABLE'' sin esquema crea la tabla en el primero de la lista. ''public'' es un esquema que viene creado en toda base de datos. 
 + 
 +{{proyecto:servidor_pg_03_version_esquema.png?direct&900|Versión de Postgres, creación del esquema y search_path}} 
 + 
 +===== Paso 4: comprobar el search_path ===== 
 + 
 +El cambio de ''search_path'' corre desde la próxima vez que entren a ''psql''. Hay que salir con ''\q'' y volver a entrar; si no, las tablas que creen en esa misma sesión quedan en el esquema ''public''. En la sesión nueva: 
 + 
 +<code> 
 +cc3201=# SHOW search_path; 
 +</code> 
 + 
 +{{proyecto:servidor_pg_04_search_path.png?direct&500|SHOW search_path en una sesión nueva}} 
 + 
 +Debería responder ''<nombre>, public''. Si responde ''"$user", public'', todavía están en la sesión antigua.
  
 +Ahora se puede usar el nombre de una tabla sin el esquema (p.ej., ''SELECT * FROM tabla'' en vez de ''SELECT * FROM <nombre>.tabla'').
  
 +Con esto ya se pueden crear tablas, cargar datos, armar índices y hacer consultas. Cuando haga falta conectarse desde su notebook o desde la aplicación, sigan con [[proyecto:conexion_externa|Conexión externa]].
  
-Ahora están listos para crear tablas, cargar datos, armar indices, hacer consultas ... desde aquí, hay que consultar las diapositivas de las clases. 
proyecto/configurar_postgres.1524255636.txt.gz · Last modified: by ahogan