Postgresql-Es Linux Java Csharp
Postgresql-Es Linux Java Csharp
#postgresql
Tabla de contenido
Acerca de 1
Observaciones 2
Versiones 2
Examples 2
Familia debian 3
Examples 10
Recopilación y vinculación. 11
Programa de muestra 11
Introducción 16
Observaciones 16
Examples 16
Capítulo 4: ACTUALIZAR 17
Examples 17
Examples 18
Replicación en PostgreSQL 18
Introducción 21
Sintaxis 21
Observaciones 21
Examples 21
Eliminar comentario 21
Introducción 22
Observaciones 22
Examples 23
Examples 26
La consulta de actualización con una combinación de dos tablas es una alternativa ya que P 26
Consulta de copiar / mover / transferir datos de tablas de una base de datos a otra tabla 27
Introducción 28
Examples 28
Suma de enteros 28
Examples 29
Examples 33
Introducción 35
Observaciones 35
Examples 35
Tipo de disparadores 36
Paso 3: probarlo 37
Paso 3: probarlo 38
Introducción 39
Examples 39
Capítulo 14: Exportar el encabezado y los datos de la tabla de la base de datos PostgreSQL 40
Introducción 40
Examples 40
copia de consulta 40
Examples 41
Sintaxis 43
Examples 43
Extensión dblink 43
Extensión FDW 43
Examples 46
Convertir una marca de tiempo o intervalo a una cadena 46
Examples 48
regr_slope (Y, X): pendiente de la ecuación lineal de ajuste por mínimos cuadrados determi 49
Introducción 51
Examples 51
digerir 51
Examples 52
ejemplo genérico 52
Sintaxis 54
Examples 54
Observaciones 58
Examples 58
usuarios 58
simples_usuarios 58
users_with_password 58
Alterando mesas 59
Añadiendo columnas 59
simples_usuarios 59
Caída de columnas 59
usuarios 59
simples_usuarios 60
Examples 61
Básico INSERTAR 61
Introducción 65
Examples 65
Observaciones 66
Examples 66
Sintaxis de PL / pgSQL 67
Bloque de devoluciones 67
excepciones personalizadas 67
Sintaxis 69
Parámetros 69
Observaciones 69
Examples 70
saveProdDb.sh 70
Examples 72
Introducción 73
Examples 73
Poblando el DB 75
-> vs ->> 76
Filtración 76
Filtrado anidado 77
Introducción 80
Examples 80
Tipos numericos 80
Tipos geometricos 82
Tipos de personajes 82
Arrays 83
Accediendo a un Array 83
Funciones de matriz 84
Creditos 85
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: postgresql
It is an unofficial and free postgresql ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official postgresql.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con postgresql
Observaciones
Esta sección proporciona una descripción general de qué es postgresql y por qué un
desarrollador puede querer usarlo.
También debe mencionar cualquier tema importante dentro de postgresql y vincular a los temas
relacionados. Dado que la Documentación para postgresql es nueva, es posible que deba crear
versiones iniciales de esos temas relacionados.
Versiones
Examples
Instalación en GNU + Linux
En la mayoría de los sistemas operativos GNU + Linux, PostgreSQL se puede instalar fácilmente
usando el administrador de paquetes del sistema operativo.
https://riptutorial.com/es/home 2
redhatXX-X.X-X.noarch.rpm
Una vez instalado, deberá iniciar el servicio de base de datos como propietario del servicio (el
valor predeterminado es postgres). Esto se hace con el comando pg_ctl.
Familia debian
En Debian y sistemas operativos derivados , escriba:
Esto instalará el paquete del servidor PostgreSQL, en la versión predeterminada que ofrecen los
repositorios de paquetes del sistema operativo.
Si la versión que está instalada de forma predeterminada no es la que usted desea, puede usar el
administrador de paquetes para buscar versiones específicas que pueden ofrecerse
simultáneamente.
También puede usar el repositorio de Yum proporcionado por el proyecto PostgreSQL (conocido
como PGDG ) para obtener una versión diferente. Esto puede permitir versiones aún no ofrecidas
por los repositorios de paquetes del sistema operativo.
Para instalar PostgreSQL en OSX, necesita saber qué versiones son compatibles actualmente.
https://riptutorial.com/es/home 3
postgresql80 @8.0.26 databases/postgresql80
postgresql81 @8.1.23 databases/postgresql81
postgresql82 @8.2.23 databases/postgresql82
postgresql83 @8.3.23 databases/postgresql83
postgresql84 @8.4.22 databases/postgresql84
postgresql90 @9.0.23 databases/postgresql90
postgresql91 @9.1.22 databases/postgresql91
postgresql92 @9.2.17 databases/postgresql92
postgresql93 @9.3.13 databases/postgresql93
postgresql94 @9.4.8 databases/postgresql94
postgresql95 @9.5.3 databases/postgresql95
postgresql96 @9.6beta2 databases/postgresql96
En este ejemplo, la versión más reciente de PostgreSQL que se admite en 9.6, así que la
instalaremos.
El registro proporciona instrucciones sobre el resto de los pasos para la instalación, por lo que
hacemos eso a continuación.
https://riptutorial.com/es/home 4
sudo mkdir -p /opt/local/var/db/postgresql96/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql96/defaultdb
sudo su postgres -c '/opt/local/lib/postgresql96/bin/initdb -D
/opt/local/var/db/postgresql96/defaultdb'
su postgres -c psql
psql (9.6.1)
Type "help" for help.
postgres=#
Aquí puede escribir una consulta para ver si el servidor se está ejecutando.
Y ver la respuesta:
setting
------------------------------------------
/opt/local/var/db/postgresql96/defaultdb
(1 row)
postgres=#
postgres=#\q
Una herramienta extremadamente simple para instalar PostgreSQL en una Mac está disponible
descargando Postgres.app .
Puede cambiar las preferencias para que PostgreSQL se ejecute en segundo plano o solo cuando
la aplicación se está ejecutando.
https://riptutorial.com/es/home 5
Si bien es una buena práctica usar un sistema operativo basado en Unix (por ejemplo, Linux o
BSD) como servidor de producción, puede instalar fácilmente PostgreSQL en Windows (con
suerte solo como servidor de desarrollo).
Seleccione la última versión estable (no Beta) (9.5.3 en el momento de la escritura). Lo más
probable es que desee el paquete Win x86-64, pero si está ejecutando una versión de Windows
de 32 bits, que es común en las computadoras antiguas, seleccione Win x86-32 en su lugar.
Nota: el cambio entre las versiones Beta y Estable implicará tareas complejas como volcado y
restauración. La actualización dentro de la versión beta o estable solo necesita un reinicio del
servicio.
Puede verificar si su versión de Windows es de 32 o 64 bits yendo a Panel de control -> Sistema
y seguridad -> Sistema -> Tipo de sistema, que dirá "## - Sistema operativo de bits". Esta es la
ruta para Windows 7, puede ser ligeramente diferente en otras versiones de Windows.
Todos esos paquetes opcionales se pueden instalar posteriormente a través del "Application
Stack Builder".
Nota: También hay otros idiomas compatibles no oficiales como PL / V8 , PL / Lua PL / Java
disponibles.
Abra pgAdmin y conéctese a su servidor haciendo doble clic en su nombre, ej. "PostgreSQL 9.5
(localhost: 5432).
Desde este punto, puede seguir guías como el excelente libro PostgreSQL: Up and Running, 2nd
Edition ( http://shop.oreilly.com/product/0636920032144.do ).
https://riptutorial.com/es/home 6
entrada de usted.
¿Por qué querría controlar manualmente el servicio PostgreSQL? Si está utilizando su PC como
servidor de desarrollo algunas veces y también lo usa para jugar videojuegos, por ejemplo,
PostegreSQL podría ralentizar un poco su sistema mientras se está ejecutando.
¿Por qué no quieres control manual? Iniciar y detener el servicio puede ser una molestia si lo
haces a menudo.
Si no nota ninguna diferencia en la velocidad y prefiere evitar la molestia, deje su Tipo de inicio
como Automático e ignore el resto de esta guía. De otra manera...
Seleccione "Servicios" de la lista, haga clic con el botón derecho en su icono y seleccione Enviar
a -> Escritorio para crear un icono de escritorio para un acceso más conveniente.
Cierre la ventana Herramientas administrativas y luego inicie Servicios desde el icono del
escritorio que acaba de crear.
Desplácese hacia abajo hasta que vea un servicio con un nombre como postgresql-x ## - 9. # (ej.
"Postgresql-x64-9.5").
Haga clic derecho en el servicio postgres, seleccione Propiedades -> Tipo de inicio -> Manual ->
Aplicar -> Aceptar. Puedes cambiarlo de nuevo a automático con la misma facilidad.
Para iniciarlo haz click derecho y selecciona Iniciar. Se mostrará un mensaje de carga y
desaparecerá por sí solo poco después. Si le da un error intente una segunda vez. Si eso no
funciona, entonces hubo algún problema con la instalación, posiblemente porque cambió alguna
configuración en Windows que la mayoría de la gente no cambia, por lo que encontrar el
problema puede requerir cierta investigación.
Si alguna vez recibe un error al intentar conectarse a su base de datos, compruebe los Servicios
para asegurarse de que se está ejecutando.
Para otros detalles muy específicos sobre la instalación de EDB PostgreSQL, por ejemplo, la
versión de Python Runtime en el paquete de idioma oficial de una versión específica de
PostgreSQL, siempre consulte la guía de instalación oficial de EBD , cambie la versión en enlace
a la versión principal de su instalador.
https://riptutorial.com/es/home 7
Instalar postgresql con cerveza en Mac
Homebrew se llama a sí mismo ' el administrador de paquetes faltantes para macOS '. Se puede
utilizar para construir e instalar aplicaciones y bibliotecas. Una vez instalado , puede usar el
comando brew para instalar PostgreSQL y sus dependencias de la siguiente manera:
brew update
brew install postgresql
Homebrew generalmente instala la última versión estable. Si necesita uno diferente, brew search
postgresql las versiones disponibles. Si necesita PostgreSQL creado con opciones particulares,
brew info postgresql las opciones que son compatibles. Si necesita una opción de compilación no
admitida, puede que tenga que hacer la compilación usted mismo, pero aún puede usar
Homebrew para instalar las dependencias comunes.
Iniciar el servidor:
psql
Si psql se queja de que no hay una base de datos correspondiente para su usuario, ejecute
createdb .
Dependencias:
https://riptutorial.com/es/home 8
• ruta de acceso --prefix=PATH para todos los archivos
--prefix=PATH
• --exec-prefix=PATH ruta de acceso --exec-prefix=PATH para el archivo architectur-dependet
• --bindir=PATH ruta --bindir=PATH para programas ejecutables
• --sysconfdir=PATH ruta de acceso --sysconfdir=PATH para archivos de configuración
• --with-pgport=NUMBER especifica un puerto para su servidor
• --with-perl agregar soporte perl
• --with-python agrega soporte python
• --with-openssl agrega soporte openssl
• --with-ldap añadir soporte ldap
• --with-blocksize=BLOCKSIZE establece tamaño de página en KB
○BLOCKSIZE debe tener una potencia de 2 y entre 1 y 32
• --with-wal-segsize=SEGSIZE establece el tamaño del tamaño del segmento WAL en MB
○SEGSIZE debe ser una potencia de 2 entre 1 y 64
Vaya a la nueva carpeta creada y ejecute el script cofigure con las opciones deseadas:
./configure --exec=/usr/local/pgsql
Ejecute make install para instalar PostgreSQL desde los archivos construidos
https://riptutorial.com/es/home 9
Capítulo 2: Accediendo a los datos
programáticamente
Examples
Acceso a Postgresql desde .NET utilizando el proveedor Npgsql
Uno de los proveedores de .NET más populares para Postgresql es Npgsql , que es compatible
con ADO.NET y se utiliza casi idénticamente como otros proveedores de base de datos de .NET.
Una consulta típica se realiza creando un comando, vinculando parámetros y luego ejecutando el
comando. Cía#:
conn.Open();
// Create a new command with CommandText and Connection constructor
using (var cmd = new NpgsqlCommand(querystring, conn))
{
// Add a parameter and set its type with the NpgsqlDbType enum
var contentString = "Hello World!";
cmd.Parameters.Add("@content", NpgsqlDbType.Text).Value = contentString;
// Execute the command and read through the rows one by one
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read()) // Returns false for 0 rows, or after reading the last row
of the results
{
// read an integer value
int primaryKey = reader.GetInt32(0);
// or
primaryKey = Convert.ToInt32(reader["primary_key"]);
https://riptutorial.com/es/home 10
}
}
} // the C# 'using' directive calls conn.Close() and conn.Dispose() for us
Recopilación y vinculación.
Durante la compilación, debe agregar el directorio de inclusión de PostgreSQL, que se puede
encontrar con pg_config --includedir , a la ruta de inclusión.
Debe vincularse con la biblioteca compartida del cliente PostgreSQL ( libpq.so en UNIX, libpq.dll
en Windows). Esta biblioteca se encuentra en el directorio de bibliotecas de PostgreSQL, que se
puede encontrar con pg_config --libdir .
Nota: por razones históricas, la biblioteca se llama libpq.so y no libpg.so , que es una trampa
popular para los principiantes.
Dado que el ejemplo de código siguiente está en el archivo coltype.c , la compilación y el enlace
se realizarían con
Programa de muestra
/* necessary for all PostgreSQL client programs, should be first */
#include <libpq-fe.h>
#include <stdio.h>
#include <string.h>
#ifdef TRACE
#define TRACEFILE "trace.out"
#endif
https://riptutorial.com/es/home 11
PGresult *res;
int rowcount, colcount, i, j, firstcol;
/* parameter type should be guessed by PostgreSQL */
const Oid paramTypes[1] = { 0 };
/* parameter value */
const char * const paramValues[1] = { "pg_database" };
/*
* Using an empty connectstring will use default values for everything.
* If set, the environment variables PGHOST, PGDATABASE, PGPORT and
* PGUSER will be used.
*/
conn = PQconnectdb("");
/*
* This can only happen if there is not enough memory
* to allocate the PGconn structure.
*/
if (conn == NULL)
{
fprintf(stderr, "Out of memory connecting to PostgreSQL.\n");
return 1;
}
#ifdef TRACE
if (NULL == (trc = fopen(TRACEFILE, "w")))
{
fprintf(stderr, "Error opening trace file \"%s\"!\n", TRACEFILE);
PQfinish(conn);
return 1;
}
https://riptutorial.com/es/home 12
NULL, /* all parameters are in text format */
0 /* result shall be in text format */
);
printf(PQfname(res, j));
}
printf("\n\n");
printf(PQgetvalue(res, i, j));
https://riptutorial.com/es/home 13
}
printf("\n");
}
import psycopg2
db_host = 'postgres.server.com'
db_port = '5432'
db_un = 'user'
db_pw = 'password'
db_name = 'testdb'
print(cur.fetchall())
Resultará:
En los hombros de los conductores de bajo nivel, hay pomm . Propone un enfoque modular,
convertidores de datos, soporte de escucha / notificación, inspector de base de datos y mucho
más.
Suponiendo que Pomm se ha instalado usando el compositor, aquí hay un ejemplo completo:
<?php
use PommProject\Foundation\Pomm;
$loader = require __DIR__ . '/vendor/autoload.php';
https://riptutorial.com/es/home 14
$pomm = new Pomm(['my_db' => ['dsn' => 'pgsql://user:pass@host:5432/db_name']]);
// TABLE comment (
// comment_id uuid PK, created_at timestamptz NN,
// is_moderated bool NN default false,
// content text NN CHECK (content !~ '^\s+$'), author_email text NN)
$sql = <<<SQL
SELECT
comment_id,
created_at,
is_moderated,
content,
author_email
FROM comment
INNER JOIN author USING (author_email)
WHERE
age(now(), created_at) < $*::interval
ORDER BY created_at ASC
SQL;
if ($comments->isEmpty()) {
printf("There are no new comments since yesterday.");
} else {
foreach ($comments as $comment) {
printf(
"%s has posted at %s. %s\n",
$comment['author_email'],
$comment['created_at']->format("Y-m-d H:i:s"),
$comment['is_moderated'] ? '[OK]' : '');
}
}
El módulo del administrador de consultas de Pomm escapa de los argumentos de consulta para
evitar la inyección de SQL. Cuando los argumentos se emiten, también los convierte de una
representación de PHP a valores de Postgres válidos. El resultado es un iterador, utiliza un cursor
internamente. Cada fila se convierte sobre la marcha, valores booleanos a valores booleanos,
marcas de tiempo a \ DateTime, etc.
https://riptutorial.com/es/home 15
Capítulo 3: Activadores de eventos
Introducción
Los disparadores de eventos se activarán cuando el evento asociado con ellos ocurra en la base
de datos.
Observaciones
Utilice el siguiente enlace para obtener una descripción completa de los activadores de eventos
en PostgreSQL
https://www.postgresql.org/docs/9.3/static/event-trigger-definition.html
Examples
Registro de eventos de inicio de comando DDL
Tipo de evento-
• DDL_COMMAND_START
• DDL_COMMAND_END
• SQL_DROP
https://riptutorial.com/es/home 16
Capítulo 4: ACTUALIZAR
Examples
Actualizar todas las filas en una tabla
Puede actualizar varias columnas en una tabla en la misma declaración, separando los pares
col=val con comas:
UPDATE person
SET country = 'USA',
state = 'NY'
WHERE city = 'New York';
También puede actualizar datos en una tabla basándose en datos de otra tabla:
UPDATE person
SET state_code = cities.state_code
FROM cities
WHERE cities.city = city;
Aquí nos estamos uniendo la person city columna a la cities city columna con el fin de obtener el
código de estado de la ciudad. Esto se usa para actualizar la columna state_code en la tabla de
person .
https://riptutorial.com/es/home 17
Capítulo 5: Alta disponibilidad de
PostgreSQL
Examples
Replicación en PostgreSQL
○ Requisitos:
mkdir $PGDATA/archive
wal_level = hot_standby
`hot_standby` logs what is required to accept read only queries on slave server.
archive_mode=on
https://riptutorial.com/es/home 18
Este parámetro permite enviar segmentos WAL a la ubicación de archivo utilizando el
parámetro archive_command .
Importante: no vuelva a iniciar el servicio hasta que todos los pasos de configuración y
copia de seguridad estén completos. Debe activar el servidor en espera en un estado
en el que esté listo para ser un servidor de respaldo. Esto significa que todos los
ajustes de configuración deben estar en su lugar y las bases de datos ya deben estar
sincronizadas. De lo contrario, la replicación de secuencias no se iniciará
pg_basebackup utilidad pg_basebackup copia los datos del directorio de datos del servidor
primario al directorio de datos esclavos.
-h: Specifies the system where to look for the primary server
-xlog-method=stream: This will force the pg_basebackup to open another connection and
stream enough xlog while backup is running.
It also ensures that fresh backup can be started without failing back
to using an archive.
hot_standby = on
standby_mode = on
https://riptutorial.com/es/home 19
replicación
trigger_file = '/tmp/postgresql.trigger.5432'
Ahora tiene todo en su lugar y está listo para activar el servidor en espera
Atribución
Este artículo se deriva sustancialmente de y se atribuye a Cómo configurar PostgreSQL para alta
disponibilidad y replicación con Hot Standby , con pequeños cambios en el formato y ejemplos y
algunos textos eliminados. La fuente se publicó bajo la licencia pública de Creative Commons 3.0
, que se mantiene aquí.
https://riptutorial.com/es/home 20
Capítulo 6: Comentarios en postgresql
Introducción
El propósito principal de COMMMENT es definir o cambiar un comentario en un objeto de base
de datos.
Solo se puede dar un solo comentario (cadena) en cualquier objeto de base de datos.
COMPROMISO nos ayudará a saber qué se definió para el objeto de base de datos en particular,
cuál es su propósito real.
La regla para COMMENT ON ROLE es que debe ser superusuario para comentar sobre un rol de
superusuario, o tener el privilegio CREATEROLE para comentar sobre roles que no sean de
superusuario. Por supuesto, un superusuario puede comentar cualquier cosa.
Sintaxis
• COMENTARIO SOBRE database_object object_name IS 'Text';
Observaciones
Sintaxis completa, consulte: http://www.postgresql.org/docs/current/static/sql-comment.html
Examples
COMENTARIO sobre la mesa
Eliminar comentario
https://riptutorial.com/es/home 21
Capítulo 7: Conéctate a PostgreSQL desde
Java
Introducción
La API para usar una base de datos relacional de Java es JDBC.
Para usarlo, coloque el archivo JAR con el controlador en la ruta de la clase JAVA.
Esta documentación muestra ejemplos de cómo utilizar el controlador JDBC para conectarse a
una base de datos.
Observaciones
URL de JDBC
Para implementar la conmutación por error, es posible tener varias entradas de host [: port
] separadas por una coma.
Se prueban a su vez hasta que una conexión tiene éxito.
• jdbc:postgresql:/[ parameters ]
parameters es una lista de pares key [= value ] , encabezados por ? y separados por & . Si falta el
value , se asume que es true .
Un ejemplo:
jdbc:postgresql://localhost/test?user=fred&password=secret&ssl&sslfactory=org.postgresql.ssl.NonValidat
Referencias
https://riptutorial.com/es/home 22
• Especificación JDBC: http://download.oracle.com/otndocs/jcp/jdbc-4_2-mrel2-eval-spec/
• Controlador JDBC de PostgreSQL: https://jdbc.postgresql.org/
• Documentación del controlador JDBC de PostgreSQL:
https://jdbc.postgresql.org/documentation/head/index.html
Examples
Conectando con java.sql.DriverManager
Primero, el controlador debe estar registrado con java.sql.DriverManager para que sepa qué clase
usar.
Esto se hace cargando la clase de controlador, generalmente con java.lang.Class.forname(
<driver class name> ) .
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to; must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, user, password);
}
En lugar de especificar parámetros de conexión como usuario y contraseña (vea una lista
completa aquí ) en la URL o en parámetros separados, puede empaquetarlos en un objeto
java.util.Properties :
/**
* Connect to a PostgreSQL database.
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
https://riptutorial.com/es/home 23
* @param user the username for the connection
* @param password the password for the connection
* @return a connection object for the established connection
* @throws ClassNotFoundException if the driver class cannot be found on the Java class path
* @throws java.sql.SQLException if the connection to the database fails
*/
private static java.sql.Connection connect(String url, String user, String password)
throws ClassNotFoundException, java.sql.SQLException
{
/*
* Register the PostgreSQL JDBC driver.
* This may throw a ClassNotFoundException.
*/
Class.forName("org.postgresql.Driver");
java.util.Properties props = new java.util.Properties();
props.setProperty("user", user);
props.setProperty("password", password);
/* don't use server prepared statements */
props.setProperty("prepareThreshold", "0");
/*
* Tell the driver manager to connect to the database specified with the URL.
* This may throw an SQLException.
*/
return java.sql.DriverManager.getConnection(url, props);
}
Es común usar javax.sql.DataSource con JNDI en los contenedores del servidor de aplicaciones,
donde registra una fuente de datos con un nombre y la busca cada vez que necesita una
conexión.
/**
* Create a data source with connection pool for PostgreSQL connections
* @param url the JDBC URL to connect to. Must start with "jdbc:postgresql:"
* @param user the username for the connection
* @param password the password for the connection
* @return a data source with the correct properties set
*/
private static javax.sql.DataSource createDataSource(String url, String user, String password)
{
/* use a data source with connection pooling */
org.postgresql.ds.PGPoolingDataSource ds = new org.postgresql.ds.PGPoolingDataSource();
ds.setUrl(url);
ds.setUser(user);
ds.setPassword(password);
/* the connection pool will have 10 to 20 connections */
ds.setInitialConnections(10);
ds.setMaxConnections(20);
/* use SSL connections without checking server certificate */
ds.setSslMode("require");
ds.setSslfactory("org.postgresql.ssl.NonValidatingFactory");
return ds;
}
https://riptutorial.com/es/home 24
Una vez que haya creado una fuente de datos al llamar a esta función, la usaría así:
/* do some work */
https://riptutorial.com/es/home 25
Capítulo 8: Consejos y trucos de Postgres
Examples
Alternativa DATEADD en Postgres
• SELECT CURRENT_DATE + '1 day'::INTERVAL
• SELECT '1999-12-11'::TIMESTAMP + '19 days'::INTERVAL
• SELECT '1 month'::INTERVAL + '1 month 3 days'::INTERVAL
SELECT
string_agg(<TABLE_NAME>.<COLUMN_NAME>, ',')
FROM
<SCHEMA_NAME>.<TABLE_NAME> T
DELETE
FROM <SCHEMA_NAME>.<Table_NAME>
WHERE
ctid NOT IN
(
SELECT
MAX(ctid)
FROM
<SCHEMA_NAME>.<TABLE_NAME>
GROUP BY
<SCHEMA_NAME>.<TABLE_NAME>.*
)
;
update <SCHEMA_NAME>.<TABLE_NAME_1> AS A
SET <COLUMN_1> = True
FROM <SCHEMA_NAME>.<TABLE_NAME_2> AS B
WHERE
A.<COLUMN_2> = B.<COLUMN_2> AND
A.<COLUMN_3> = B.<COLUMN_3>
https://riptutorial.com/es/home 26
select
(
(DATE_PART('year', AgeonDate) - DATE_PART('year', tmpdate)) * 12
+
(DATE_PART('month', AgeonDate) - DATE_PART('month', tmpdate))
)
from dbo."Table1"
Primera ejecución
Entonces
INSERT INTO
<SCHEMA_NAME>.<TABLE_NAME_1>
SELECT *
FROM
DBLINK(
'HOST=<IP-ADDRESS> USER=<USERNAME> PASSWORD=<PASSWORD> DBNAME=<DATABASE>',
'SELECT * FROM <SCHEMA_NAME>.<TABLE_NAME_2>')
AS <TABLE_NAME>
(
<COLUMN_1> <DATATYPE_1>,
<COLUMN_1> <DATATYPE_2>,
<COLUMN_1> <DATATYPE_3>
);
https://riptutorial.com/es/home 27
Capítulo 9: Consultas recursivas
Introducción
No hay consultas reales recursivas!
Examples
Suma de enteros
Enlace a la documentación
https://riptutorial.com/es/home 28
Capítulo 10: Copia de seguridad y restaurar
Observaciones
Es muy importante que si usa esto, llame a la función pg_start_backup() antes y a la función
pg_stop_backup() después. Hacer copias de seguridad del sistema de archivos no es seguro de lo
contrario; incluso una instantánea de ZFS o FreeBSD del sistema de archivos respaldado sin
esas llamadas de función colocará la base de datos en modo de recuperación y puede perder
transacciones.
Evitaría hacer copias de seguridad del sistema de archivos en lugar de copias de seguridad
regulares de Postgres, tanto por este motivo como porque los archivos de copia de seguridad de
Postgres (especialmente en el formato personalizado) son extremadamente versátiles para
admitir restauraciones alternativas. Ya que son archivos únicos, también son menos complicados
de administrar.
Examples
Copia de seguridad de una base de datos
-Fc selecciona el "formato de copia de seguridad personalizado" que le da más poder que el SQL
sin formato; ver pg_restore para más detalles. Si desea un archivo SQL de vainilla, puede hacer
esto en su lugar:
o incluso
Una alternativa más segura usa -1 para envolver la restauración en una transacción. La -f
especifica el nombre de archivo en lugar de usar la redirección de shell.
https://riptutorial.com/es/home 29
Los archivos de formato personalizado deben restaurarse utilizando pg_restore con la opción -d
para especificar la base de datos:
Se recomienda el uso del formato personalizado porque puede elegir qué cosas restaurar y,
opcionalmente, habilitar el procesamiento paralelo.
Es posible que deba realizar un pg_dump seguido de un pg_restore si actualiza de una versión
postgresql a una más nueva.
$ pg_dumpall -f backup.sql
Esto funciona entre bastidores al hacer múltiples conexiones al servidor una vez para cada base
de datos y ejecutar pg_dump en él.
A veces, puede tener la tentación de configurarlo como un trabajo cron, por lo que desea ver la
fecha en que se tomó la copia de seguridad como parte del nombre de archivo:
$ postgres-backup-$(date +%Y-%m-%d).sql
Sin embargo, tenga en cuenta que esto podría producir archivos grandes diariamente. Postgresql
tiene un mecanismo mucho mejor para copias de seguridad regulares: archivos WAL
Para realizar una copia de seguridad del sistema de archivos, debe usar estas funciones para
asegurarse de que Postgres se encuentre en un estado constante mientras se prepara la copia de
seguridad.
https://riptutorial.com/es/home 30
tabla
COPY <tablename> FROM '<filename with path>';
Para insertar en el user tabla desde un archivo llamado user_data.csv ubicado dentro de
/home/user/ :
Nota: Si se citan datos, los caracteres de comillas de datos predeterminados son comillas dobles.
Si los datos se citan utilizando cualquier otro carácter, use la opción QUOTE ; sin embargo, esta
opción solo está permitida cuando se utiliza el formato CSV.
https://riptutorial.com/es/home 31
COPIAR usuario DESDE '/ home / user / user_data' WITH DELIMITER '|';
COPIAR (SELECCIONAR * DEL usuario WHERE nombre_usuario COMO "A%") A '/ home / user
/ user_data';
Aquí se ejecuta el programa gzip para comprimir los datos de la tabla de usuario.
Los datos se pueden exportar utilizando el comando de copia o utilizando las opciones de la línea
de comandos del comando psql.
-F es especificar delimitador
-A or --no-align
Cambia al modo de salida no alineado. (De lo contrario, el modo de salida predeterminado está
alineado.)
https://riptutorial.com/es/home 32
Capítulo 11: Creación de tablas
Examples
Creación de tablas con clave primaria
Se recomienda utilizar nombres en minúsculas para la tabla y también para todas las columnas.
Si usa nombres en mayúsculas, como Person , tendría que ajustar ese nombre entre comillas
dobles ( "Person" ) en todas y cada una de las consultas, porque PostgreSQL impone el plegado
de casos.
Abra la herramienta de línea de comandos psql conectada a la base de datos donde se encuentra
su tabla. Luego escribe el siguiente comando:
\d tablename
\d+ tablename
Si ha olvidado el nombre de la tabla, simplemente escriba \ d en psql para obtener una lista de
tablas y vistas en la base de datos actual.
https://riptutorial.com/es/home 33
CREATE TABLE person (
person_id BIGINT NOT NULL,
last_name VARCHAR(255) NOT NULL,
first_name VARCHAR(255),
age INT NOT NULL,
PRIMARY KEY (person_id)
);
CREATE TABLE people_over_30 AS SELECT * FROM person WHERE age > 30;
Puede crear tablas no registradas para que pueda hacer las tablas considerablemente más
rápido. La tabla no registrada salta la escritura write-ahead registro de write-ahead que significa
que no es seguro y no se puede replicar.
En este ejemplo, la tabla de usuario tendrá una columna que hace referencia a la tabla de
agencia.
https://riptutorial.com/es/home 34
Capítulo 12: Disparadores y funciones de
disparador
Introducción
El activador se asociará con la tabla o vista especificada y ejecutará la función function_name
especificada cuando se produzcan ciertos eventos.
Observaciones
Utilice el siguiente enlace para obtener una descripción completa de:
• Desencadenadores : https://www.postgresql.org/docs/current/static/sql-createtrigger.html
• Funciones de activación : https://www.postgresql.org/docs/current/static/plpgsql-
trigger.html
Examples
Función básica de disparo PL / pgSQL
BEGIN
-- TG_TABLE_NAME :name of the table that caused the trigger invocation
IF (TG_TABLE_NAME = 'users') THEN
END IF;
RETURN null;
https://riptutorial.com/es/home 35
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Tipo de disparadores
https://riptutorial.com/es/home 36
Gatillo de inserción individual
Paso 1: crea tu función
Paso 3: probarlo
https://riptutorial.com/es/home 37
vReturn := OLD;
END IF;
RETURN vReturn;
END $BODY$
LANGUAGE plpgsql;
Paso 3: probarlo
https://riptutorial.com/es/home 38
Capítulo 13: Encontrar la longitud de la
cadena / longitud del carácter
Introducción
Para obtener la longitud de los campos de "variación de caracteres", "texto", use char_length () o
character_length ().
Examples
Ejemplo para obtener la longitud de un carácter que varía el campo
Resultado:
Resultado:
https://riptutorial.com/es/home 39
Capítulo 14: Exportar el encabezado y los
datos de la tabla de la base de datos
PostgreSQL a un archivo CSV
Introducción
Desde la herramienta de administración Adminer, tiene opción de exportación a archivo csv para
la base de datos mysql, pero no está disponible para la base de datos postgresql. Aquí mostraré
el comando para exportar CSV para la base de datos postgresql.
Examples
Exporte la tabla PostgreSQL a csv con encabezado para algunas columnas
copia de consulta
Lea Exportar el encabezado y los datos de la tabla de la base de datos PostgreSQL a un archivo
CSV en línea: https://riptutorial.com/es/postgresql/topic/8643/exportar-el-encabezado-y-los-datos-
de-la-tabla-de-la-base-de-datos-postgresql-a-un-archivo-csv
https://riptutorial.com/es/home 40
Capítulo 15: Expresiones de tabla comunes
(CON)
Examples
Expresiones de tablas comunes en consultas SELECT
Las expresiones de tabla comunes admiten la extracción de porciones de consultas más grandes.
Por ejemplo:
WITH sales AS (
SELECT
orders.ordered_at,
orders.user_id,
SUM(orders.amount) AS total
FROM orders
GROUP BY orders.ordered_at, orders.user_id
)
SELECT
sales.ordered_at,
sales.total,
users.name
FROM sales
JOIN users USING (user_id)
https://riptutorial.com/es/home 41
path || ' > ' || empl.name,
empl.boss,
empl.name
from
empl join t
on empl.boss = t.name
) select * from t order by path;
https://riptutorial.com/es/home 42
Capítulo 16: EXTENSION dblink y
postgres_fdw
Sintaxis
• dblink ('dbname = name_db_distance port = PortOfDB host = HostOfDB usuario =
usernameDB contraseña = passwordDB', 'MY QUESRY')
• MI PREGUNTA = esto puede ser cualquier operación que quiera hacer SELECCIONAR,
INSERTAR, ...
Examples
Extensión dblink
EXTENSIÓN de dblink es una técnica para conectar otra base de datos y hacer que esta base de
datos funcione, para hacer lo que necesita:
2-Haz tu operación:
Por ejemplo, seleccione algún atributo de otra tabla en otra base de datos:
SELECT * FROM
dblink ('dbname = bd_distance port = 5432 host = 10.6.6.6 user = username
password = passw@rd', 'SELECT id, code FROM schema.table')
AS newTable(id INTEGER, code character varying);
Extensión FDW
FDW es una implementación de dblink, es más útil, así que para usarlo:
https://riptutorial.com/es/home 43
CREATE EXTENSION postgres_fdw;
2-Crear SERVIDOR:
CREATE SERVER name_srv FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'hostname',
dbname 'bd_name', port '5432');
CREATE USER MAPPING FOR postgres SERVER name_srv OPTIONS(user 'postgres', password
'password');
Para acceder al esquema completo de la base de datos del servidor en lugar de una sola tabla.
Siga los siguientes pasos:
1. Crear EXTENSIÓN:
2. Crear SERVIDOR:
CREATE SERVER server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_ip',
dbname 'db_name', port 'port_number');
4. Cree un nuevo esquema para acceder al esquema de la base de datos del servidor:
https://riptutorial.com/es/home 44
FROM SERVER server_name
INTO schema_name;
Esto se puede usar para acceder a múltiples esquemas de bases de datos remotas.
https://riptutorial.com/es/home 45
Capítulo 17: Fechas, sellos de tiempo e
intervalos
Examples
Convertir una marca de tiempo o intervalo a una cadena
Puede convertir una timestamp o un valor de interval en una cadena con la función to_char() :
Esta declaración producirá la cadena "12 ago 2016 04:40:32 PM". La cadena de formato se
puede modificar de muchas maneras diferentes; La lista completa de patrones de plantillas se
puede encontrar aquí .
Tenga en cuenta que también puede insertar texto sin formato en la cadena de formato y puede
usar los patrones de plantilla en cualquier orden:
Esto producirá la cadena "Hoy es sábado, el día 12 del mes de agosto de 2016". Sin embargo,
debe tener en cuenta que cualquier patrón de plantilla, incluso los de una sola letra, como "I", "D",
"W", se convierten, a menos que el texto simple esté entre comillas dobles. Como medida de
seguridad, debe poner todo el texto sin formato entre comillas dobles, como se hizo
anteriormente.
Puede localizar la cadena a su idioma de elección (nombres de día y mes) usando el modificador
TM (modo de traducción). Esta opción utiliza la configuración de localización del servidor que
ejecuta PostgreSQL o el cliente que se conecta a él.
Con una configuración regional española, esto produce "Sábado, 12 de agosto del año 2016".
https://riptutorial.com/es/home 46
SELECCIONE date_trunc ('week', <>) AS "Week", count (*) FROM <> GROUP BY 1 ORDER BY
1;
https://riptutorial.com/es/home 47
Capítulo 18: Funciones agregadas
Examples
Estadísticas simples: min (), max (), avg ()
Para determinar algunas estadísticas simples de un valor en una columna de una tabla, puede
usar una función agregada.
Nombre Años
Allie 17
Amanda 14
Alana 20
Podría escribir esta declaración para obtener el valor mínimo, máximo y promedio:
Resultado:
14 20 17
Alana 20 Rusia
Puede escribir la SELECT ... GROUP BY para obtener nombres de cada país:
https://riptutorial.com/es/home 48
SELECT string_agg(name, ', ') AS names, country
FROM individuals
GROUP BY country;
Tenga en cuenta que necesita usar una cláusula GROUP BY porque string_agg() es una función
agregada.
Resultado:
nombres país
Alana Rusia
Para ilustrar cómo usar regr_slope (Y, X), lo apliqué a un problema del mundo real. En Java, si no
limpia la memoria correctamente, la basura se puede atascar y llenar la memoria. Vuelca
estadísticas cada hora sobre la utilización de la memoria de diferentes clases y la carga en una
base de datos de Postgres para su análisis.
Todos los candidatos a pérdida de memoria tendrán una tendencia a consumir más memoria a
medida que pase más tiempo. Si trazas esta tendencia, te imaginas una línea que va hacia arriba
y hacia la izquierda:
^
|
s | Legend:
i | * - data point
z | -- - trend
e |
( |
b | *
y | --
t | --
e | * -- *
s | --
) | *-- *
| -- *
| -- *
--------------------------------------->
time
Supongamos que tiene una tabla que contiene datos de histograma de volcado de pila (una
asignación de clases a la cantidad de memoria que consumen):
https://riptutorial.com/es/home 49
-- when the heap histogram was taken
histwhen timestamp without time zone NOT NULL,
-- the object type bytes are referring to
-- ex: java.util.String
class character varying NOT NULL,
-- the size in bytes used by the above class
bytes integer NOT NULL
);
Para calcular la pendiente de cada clase, agrupamos por sobre la clase. La cláusula HAVING> 0
garantiza que solo obtengamos candidatos con una pendiente positiva (una línea que va hacia
arriba y hacia la izquierda). Clasificamos por la pendiente descendente para obtener las clases
con la mayor tasa de aumento de memoria en la parte superior.
Salida:
class | slope
---------------------------+----------------------
java.util.ArrayList | 71.7993806279174
java.util.HashMap | 49.0324576155785
java.lang.String | 31.7770770326123
joe.schmoe.BusinessObject | 23.2036817108056
java.lang.ThreadLocal | 20.9013528767851
Desde la salida, vemos que el consumo de memoria de java.util.ArrayList está aumentando más
rápidamente a 71.799 bytes por segundo y es potencialmente parte de la pérdida de memoria.
https://riptutorial.com/es/home 50
Capítulo 19: Funciones criptográficas de
Postgres.
Introducción
En Postgres, las funciones criptográficas se pueden desbloquear utilizando el módulo pgcrypto.
CREAR EXTENSIÓN pgcrypto;
Examples
digerir
DIGEST()funciones DIGEST() generan un hash binario de los datos dados. Esto se puede utilizar
para crear un hash aleatorio.
Ejemplos:
https://riptutorial.com/es/home 51
Capítulo 20: Funciones de ventana
Examples
ejemplo genérico
Corriendo:
select *
, dense_rank() over (order by i) dist_by_i
, lag(t) over () prev_t
, nth_value(i, 6) over () nth
, count(true) over (partition by i) num_by_i
, count(true) over () num_all
, ntile(3) over() ntile
from wf_example
;
Resultado:
Explicación:
dist_by_i : dense_rank() over (order by i) es como un número de fila por valores distintos. Puede
usarse para el número de valores distintos de i ( count(DISTINCT i) no funcionará). Solo usa el
valor máximo.
prev_t : lag(t) over () es un valor anterior de t en toda la ventana. importa que sea nulo para la
https://riptutorial.com/es/home 52
primera fila.
num_by_i : count(true) over (partition by i) es una cantidad de filas para cada valor de i
ntile : ntile(3) over() divide toda la ventana a 3 (la mayor cantidad posible) igual en cantidad de
partes
select i
, dense_rank() over (order by i)
, row_number() over ()
, rank() over (order by i)
from wf_example
El resultado es:
• dense_rank ordena VALORES de i por aparición en ventana. i=1 aparece, por lo que la
primera fila tiene dense_rank, la siguiente y la tercera i el valor no cambia, por lo que es
dense_rank muestra 1 : el valor FIRST no ha cambiado. la cuarta fila i=2 , es el segundo valor
de i se reunió, por lo que dense_rank muestra 2, y también para la siguiente fila. Luego
cumple con el valor i=3 en la 6ª fila, por lo que muestra 3. Lo mismo para el resto de los dos
valores de i . Entonces, el último valor de dense_rank es el número de valores distintos de i .
• Rango Para no confundirse con dense_rank esta función ordena el NÚMERO DE FILA de los
valores i . Así que comienza igual con tres, pero tiene el siguiente valor 4, lo que significa
que i=2 (nuevo valor) se cumplió en la fila 4. Igual i=3 se cumplió en la fila 6. Etc ..
https://riptutorial.com/es/home 53
Capítulo 21: Gestión de roles
Sintaxis
• CREATE ROLE name [ [ WITH ] option [ ... ] ]
Examples
Crear un usuario con una contraseña.
En general, debe evitar usar la función de base de datos predeterminada (a menudo postgres ) en
su aplicación. En su lugar, debe crear un usuario con niveles más bajos de privilegios. Aquí
hacemos uno llamado niceusername y le damos una contraseña very-strong-password
El problema con eso es que las consultas escritas en la consola psql se guardan en un archivo
histórico .psql_history en el directorio de inicio del usuario y también pueden registrarse en el
registro del servidor de base de datos PostgreSQL, exponiendo así la contraseña.
Para evitar esto, use el comando \password para establecer la contraseña del usuario. Si el
usuario que emite el comando es un superusuario, no se solicitará la contraseña actual. (Debe ser
superusuario para alterar contraseñas de superusuarios)
Para admitir una aplicación determinada, a menudo creas un nuevo rol y una base de datos para
que coincida.
$ createuser -P blogger
Enter password for the new role: ********
Enter it again: ********
https://riptutorial.com/es/home 54
Esto supone que pg_hba.conf se ha configurado correctamente, lo que probablemente tenga este
aspecto:
--ACCESS DB
REVOKE CONNECT ON DATABASE nova FROM PUBLIC;
GRANT CONNECT ON DATABASE nova TO user;
Con las consultas anteriores, los usuarios que no son de confianza ya no pueden conectarse a la
base de datos.
--ACCESS SCHEMA
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT USAGE ON SCHEMA public TO user;
--ACCESS TABLES
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC ;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only ;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write ;
GRANT ALL ON ALL TABLES IN SCHEMA public TO admin ;
--ACCESS SEQUENCES
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only; -- allows the use of CURRVAL
GRANT UPDATE ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of NEXTVAL and
SETVAL
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of CURRVAL and
NEXTVAL
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO admin;
Con los siguientes comandos, se puede establecer la ruta de búsqueda predeterminada del
usuario.
https://riptutorial.com/es/home 55
postgres=# \c postgres user1
You are now connected to database "postgres" as user "user1".
postgres=> show search_path;
search_path
----------------
"$user",public
(1 row)
2. Configure search_path con alter user comando alter user para agregar un nuevo esquema
my_schema
Alternativa:
Con las siguientes consultas, puede establecer privilegios de acceso en objetos creados en el
futuro en un esquema específico.
https://riptutorial.com/es/home 56
O bien, puede establecer privilegios de acceso en objetos creados en el futuro por un usuario
específico.
ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT SELECT ON TABLES TO read_only;
https://riptutorial.com/es/home 57
Capítulo 22: Herencia
Observaciones
Una explicación de por qué querría usar la herencia en PostgreSQL está disponible aquí:
http://stackoverflow.com/a/3075248/653378
Examples
Creando mesas infantiles
usuarios
Columna Tipo
simples_usuarios
Columna Tipo
users_with_password
Columna Tipo
contraseña texto
https://riptutorial.com/es/home 58
Alterando mesas
Añadiendo columnas
ALTER TABLE simple_users ADD COLUMN password text;
simples_usuarios
Columna Tipo
contraseña texto
Caída de columnas
Usando nuestras tablas alteradas:
usuarios
Columna Tipo
https://riptutorial.com/es/home 59
simples_usuarios
Columna Tipo
contraseña texto
Desde que agregamos la columna a simple_users , PostgreSQL se asegura de que esta columna
no se simple_users .
Ahora, si tuviéramos otra tabla secundaria, su columna de password , por supuesto, se habría
eliminado.
https://riptutorial.com/es/home 60
Capítulo 23: INSERTAR
Examples
Básico INSERTAR
INSERT INTO person VALUES (1, 'john doe', 25, 'new york');
Si desea insertar solo columnas específicas, debe indicar explícitamente qué columnas:
Tenga en cuenta que si existe alguna restricción en la tabla, como NOT NULL, se le pedirá que
incluya esas columnas en cualquier caso.
Puede insertar datos en una tabla como resultado de una declaración de selección:
INSERT INTO person SELECT * FROM tmp_person WHERE age < 30;
Tenga en cuenta que la proyección de la selección debe coincidir con las columnas necesarias
para la inserción. En este caso, la tabla tmp_person tiene las mismas columnas que person .
https://riptutorial.com/es/home 61
transferir datos entre archivos y tablas, pero también es mucho más rápido que INSERT cuando se
agregan más de unos pocos miles de filas a la vez.
1,Yogesh
2,Raunak
3,Varun
4,Kamal
5,Hari
6,Amit
Y necesitamos una tabla de dos columnas en la que se pueden importar estos datos.
Si está insertando datos en una tabla con una columna de incremento automático y si desea
https://riptutorial.com/es/home 62
obtener el valor de la columna de incremento automático.
desde la versión 9.5, postgres ofrece la funcionalidad UPSERT con la declaración INSERT .
Digamos que tienes una tabla llamada my_table, creada en varios ejemplos anteriores.
Insertamos una fila, devolviendo el valor PK de la fila insertada:
https://riptutorial.com/es/home 63
(1 row)
INSERT 0 1
Ahora, si intentamos insertar una fila con una clave única existente, se generará una excepción:
b=# INSERT INTO my_table values (2,'one',333) ON CONFLICT (id) DO UPDATE SET name =
my_table.name||' changed to: "two" at '||now() returning *;
id | name | contact_number
----+-----------------------------------------------------------------------------------------
------------------+----------------
2 | one changed to: "two" at 2016-11-23 08:32:17.105179+00 | 333
(1 row)
INSERT 0 1
https://riptutorial.com/es/home 64
Capítulo 24: JUNTARSE
Introducción
Coalesce devuelve el primer argumento ninguno nulo de un conjunto de argumentos. Solo se
devuelve el primer argumento no nulo, se ignoran todos los argumentos subsiguientes. La función
se evaluará como nula si todos los argumentos son nulos.
Examples
Solo argumento no nulo
coalesce
--------
'HELLO WORLD'
PGSQL> SELECT COALESCE (NULL, NULL, 'first non null', null, null, 'second non null');
coalesce
--------
'first non null'
coalesce
--------
https://riptutorial.com/es/home 65
Capítulo 25: Programación con PL / pgSQL
Observaciones
PL / pgSQL es el lenguaje de programación incorporado de PostgreSQL para escribir funciones
que se ejecutan dentro de la base de datos, conocido como procedimientos almacenados en
otras bases de datos. Extiende SQL con bucles, condicionales y tipos de retorno. Aunque su
sintaxis puede ser extraña para muchos desarrolladores, es mucho más rápida que cualquier
cosa que se ejecute en el servidor de aplicaciones porque se elimina la sobrecarga de conexión a
la base de datos, lo cual es particularmente útil cuando de lo contrario necesitaría ejecutar una
consulta, espere el resultado. y enviar otra consulta.
Aunque existen muchos otros lenguajes de procedimiento para PostgreSQL, como PL / Python,
PL / Perl y PLV8, PL / pgSQL es un punto de partida común para los desarrolladores que desean
escribir su primera función PostgreSQL porque su sintaxis se basa en SQL. También es similar a
PL / SQL, el lenguaje de procedimiento nativo de Oracle, por lo que cualquier desarrollador
familiarizado con PL / SQL encontrará el lenguaje familiar, y cualquier desarrollador que pretenda
desarrollar aplicaciones de Oracle en el futuro pero que quiera comenzar con una base de datos
gratuita puede hacer la transición. desde PL / pgSQL a PL / SQL con relativa facilidad.
Examples
Función PL / pgSQL básica
https://riptutorial.com/es/home 66
BEGIN
-- SELECT must always be used with INTO
SELECT COUNT(user_id) INTO subscribers FROM users WHERE subscribed;
-- function result
RETURN subscribers;
EXCEPTION
-- return NULL if table "users" does not exist
WHEN undefined_table
THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;
Esto podría haberse logrado solo con la instrucción SQL, pero demuestra la estructura básica de
una función.
select active_subscribers();
Sintaxis de PL / pgSQL
Bloque de devoluciones
excepciones personalizadas
https://riptutorial.com/es/home 67
creando una excepción personalizada que no asigna errm:
vocación:
t=# do
$$
declare
_t text;
begin
perform s165();
exception when SQLSTATE 'P0001' then raise info '%','state P0001 caught: '||SQLERRM;
perform s164();
end;
$$
;
INFO: state P0001 caught: nothing specified
ERROR: S 164
DETAIL: D 164
HINT: H 164
CONTEXT: SQL statement "SELECT s164()"
PL/pgSQL function inline_code_block line 7 at PERFORM
También tiene mucho sentido mantener una tabla de excepciones, como aquí:
http://stackoverflow.com/a/2700312/5315974
https://riptutorial.com/es/home 68
Capítulo 26: Script de respaldo para un DB de
producción
Sintaxis
• La secuencia de comandos le permite crear un directorio de respaldo para cada ejecución
con la siguiente sintaxis: Nombre del directorio de respaldo de la base de datos + fecha y
hora de ejecución
• Ejemplo: prodDir22-11-2016-19h55
• Una vez creado, crea dos archivos de copia de seguridad con la siguiente sintaxis: Nombre
de la base de datos + fecha y hora de ejecución
• Ejemplo:
• dbprod22-11-2016-19h55.backup (archivo de volcado)
• dbprod22-11-2016-19h55.sql (archivo sql)
• Al final de una ejecución el 22-11-2016 @ 19h55 , obtenemos:
• /save_bd/prodDir22-11-2016-19h55/dbprod22-11-2016-19h55.backup
• /save_bd/prodDir22-11-2016-19h55/dbprod22-11-2016-19h55.sql
Parámetros
parámetro detalles
Observaciones
https://riptutorial.com/es/home 69
1. Si hay una herramienta de copia de seguridad como HDPS , o Symantec Backup , ... Es
necesario vaciar el directorio de copia de seguridad antes de cada inicio .
Para evitar el desorden de la herramienta de copia de seguridad porque se supone que la copia
de seguridad de los archivos antiguos se realiza.
rm -R / save_db / *
El siguiente comando se usa para editar la tabla cron para el usuario actual.
crontab -e
0 23 * * * /saveProdDb.sh
Examples
saveProdDb.sh
En general, tendemos a hacer una copia de seguridad de la base de datos con el cliente
pgAdmin. La siguiente es una secuencia de comandos sh utilizada para guardar la base de datos
(en linux) en dos formatos:
• Volcar archivo : para una versión más alta que la versión actual.
#!/bin/sh
cd /save_db
#rm -R /save_db/*
DATE=$(date +%d-%m-%Y-%Hh%M)
echo -e "Sauvegarde de la base du ${DATE}"
mkdir prodDir${DATE}
cd prodDir${DATE}
#dump file
/opt/postgres/9.0/bin/pg_dump -i -h localhost -p 5432 -U postgres -F c -b -w -v -f
"dbprod${DATE}.backup" dbprod
#SQL file
/opt/postgres/9.0/bin/pg_dump -i -h localhost -p 5432 -U postgres --format plain --verbose -f
"dbprod${DATE}.sql" dbprod
https://riptutorial.com/es/home 70
https://riptutorial.com/es/postgresql/topic/7974/script-de-respaldo-para-un-db-de-produccion
https://riptutorial.com/es/home 71
Capítulo 27: SELECCIONAR
Examples
SELECCIONAR utilizando DONDE
+----+------------+-----------+----------+------+
| id | first_name | last_name | username | pass |
+----+------------+-----------+----------+------+
| 1 | hello | world | hello | word |
+----+------------+-----------+----------+------+
| 2 | root | me | root | toor |
+----+------------+-----------+----------+------+
Sintaxis
Ejemplos
https://riptutorial.com/es/home 72
Capítulo 28: Soporte JSON
Introducción
JSON: Java Script Object Notation, Postgresql admite el tipo de datos JSON desde la versión 9.2.
Hay algunas funciones y operadores predefinidos para acceder a los datos JSON. El operador ->
devuelve la clave de la columna JSON. El operador ->> devuelve el valor de la columna JSON.
Examples
Creando una tabla JSON pura
Para crear una tabla JSON pura, debe proporcionar un único campo con el tipo JSONB :
https://riptutorial.com/es/home 73
"work": {
"city": "Edinburgh",
"country": "United Kingdom"
}
}
}
$$);
la primera declaración utilizará el índice creado anteriormente, mientras que las dos últimas no lo
harán, lo que requerirá una exploración completa de la tabla.
Todavía es posible usar el operador -> al obtener datos resultantes, por lo que las siguientes
consultas también usarán el índice:
https://riptutorial.com/es/home 74
DROP DATABASE IF EXISTS books_db;
CREATE DATABASE books_db WITH ENCODING='UTF8' TEMPLATE template0;
Poblando el DB
INSERT INTO books(client, data) values (
'Joe',
'{ "title": "Siddhartha", "author": { "first_name": "Herman", "last_name": "Hesse" } }'
),(
'Jenny',
'{ "title": "Dharma Bums", "author": { "first_name": "Jack", "last_name": "Kerouac" } }'
),(
'Jenny',
'{ "title": "100 años de soledad", "author": { "first_name": "Gabo", "last_name":
"Marquéz" } }'
);
Salida:
columnas JSON
Seleccionando 1 columna:
SELECT client,
data->'title' AS title
FROM books;
Salida:
https://riptutorial.com/es/home 75
Seleccionando 2 columnas:
SELECT client,
data->'title' AS title, data->'author' AS author
FROM books;
Salida:
-> vs ->>
El operador -> devuelve el tipo JSON original (que podría ser un objeto), mientras que ->>
devuelve texto.
SELECT client,
data->'author'->'last_name' AS author
FROM books;
Salida:
Filtración
Seleccione filas basadas en un valor dentro de su JSON:
SELECT
client,
https://riptutorial.com/es/home 76
data->'title' AS title
FROM books
WHERE data->'title' = '"Dharma Bums"';
Observe DÓNDE usa -> así que debemos comparar con JSON '"Dharma Bums"'
Salida:
Filtrado anidado
Encuentre filas basadas en el valor de un objeto JSON anidado:
SELECT
client,
data->'title' AS title
FROM books
WHERE data->'author'->>'last_name' = 'Kerouac';
Salida:
Vamos a almacenar eventos en esta tabla, como páginas vistas. Cada evento tiene propiedades,
que pueden ser cualquier cosa (por ejemplo, la página actual) y también envía información sobre
el navegador (como el sistema operativo, la resolución de la pantalla, etc.). Ambos son
completamente libres y podrían cambiar con el tiempo (ya que pensamos en cosas adicionales
para rastrear).
https://riptutorial.com/es/home 77
),(
'pageview', '2',
'{ "page": "/" }',
'{ "name": "Firefox", "os": "Windows", "resolution": { "x": 1920, "y": 1200 } }'
),(
'pageview', '1',
'{ "page": "/account" }',
'{ "name": "Chrome", "os": "Mac", "resolution": { "x": 1440, "y": 900 } }'
),(
'purchase', '5',
'{ "amount": 10 }',
'{ "name": "Firefox", "os": "Windows", "resolution": { "x": 1024, "y": 768 } }'
),(
'purchase', '15',
'{ "amount": 200 }',
'{ "name": "Firefox", "os": "Windows", "resolution": { "x": 1280, "y": 800 } }'
),(
'purchase', '15',
'{ "amount": 500 }',
'{ "name": "Firefox", "os": "Windows", "resolution": { "x": 1280, "y": 800 } }'
);
Salida:
Salida:
https://riptutorial.com/es/home 78
• Ingresos totales por visitante:
Salida:
Salida:
https://riptutorial.com/es/home 79
Capítulo 29: Tipos de datos
Introducción
PostgreSQL tiene un amplio conjunto de tipos de datos nativos disponibles para los usuarios. Los
usuarios pueden agregar nuevos tipos a PostgreSQL usando el comando CREAR TIPO.
https://www.postgresql.org/docs/9.6/static/datatype.html
Examples
Tipos numericos
Tamaño de
Nombre Descripción Distancia
almacenamiento
entero de rango
smallint 2 bytes -32768 a +32767
pequeño
elección ypical
integer 4 bytes -2147483648 a +2147483647
para entero
precisión variable,
real 4 bytes Precisión de 6 dígitos decimales
inexacta
pequeño entero
smallserial 2 bytes 1 a 32767
autoincremento
autoincremento
serial 4 bytes 1 a 2147483647
entero
https://riptutorial.com/es/home 80
Tamaño de
Nombre Descripción Distancia
almacenamiento
autoincremento
grande
Tamaño de
Nombre Descripción Bajo valor Alto valor Resolución
almacenamiento
time(sin 1
hora del día
zona 8 bytes 00:00:00 24:00:00 microsegundo
(sin fecha)
horaria) / 14 dígitos
- 1
intervalo de 178000000
interval 16 bytes 178000000 microsegundo
tiempo años
años / 14 dígitos
rango de
marca de
tsrange
tiempo sin
zona horaria
rango de
marca de
tstzrange
tiempo con
zona horaria
https://riptutorial.com/es/home 81
Tamaño de
Nombre Descripción Bajo valor Alto valor Resolución
almacenamiento
rango de
daterange
fecha
Tipos geometricos
Tamaño de
Nombre Descripción Representación
almacenamiento
Tipos de personajes
Nombre Descripción
https://riptutorial.com/es/home 82
Nombre Descripción
Arrays
En PostgreSQL puede crear matrices de cualquier tipo integrado, definido por el usuario o
enumeración. De forma predeterminada, no hay límite para una matriz, pero puede especificarla.
SELECT integer[];
SELECT integer[3];
SELECT integer[][];
SELECT integer[3][3];
SELECT integer ARRAY;
SELECT integer ARRAY[3];
Creando un Array
SELECT '{0,1,2}';
SELECT '{{0,1},{1,2}}';
SELECT ARRAY[0,1,2];
SELECT ARRAY[ARRAY[0,1],ARRAY[1,2]];
Accediendo a un Array
Por defecto, PostgreSQL usa una convención de numeración basada en uno para los arreglos, es
decir, un arreglo de n elementos comienza con el array[1] y termina con el array[n] .
int_arr
---------
0
(1 row)
--sclicing an array
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1:2] FROM arr;
int_arr
---------
{0,1}
(1 row)
https://riptutorial.com/es/home 83
with arr as (select ARRAY[0,1,2] int_arr) select array_dims(int_arr) from arr;
array_dims
------------
[1:3]
(1 row)
array_length
--------------
3
(1 row)
cardinality
-------------
3
(1 row)
Funciones de matriz
será añadido
https://riptutorial.com/es/home 84
Creditos
S.
Capítulos Contributors
No
Accediendo a los
2 datos AstraSerg, brichins, greg, Laurenz Albe
programáticamente
Activadores de
3 Ben H, Tajinder, Udlei Nati
eventos
Alta disponibilidad de
5 gpdude_, Patrick
PostgreSQL
Comentarios en
6 Ben, KIRAN KUMAR MATAM
postgresql
Conéctate a
7 PostgreSQL desde Laurenz Albe
Java
Consejos y trucos de
8 Ben H, skj123, user_0, YCF_L
Postgres
Copia de seguridad y
10 ankidaemon, Ben H, Daniel Lyons, e4c5, Laurel, mnoronha
restaurar
Disparadores y
12 funciones de chalitha geekiyanage, mnoronha, Udlei Nati
disparador
Encontrar la longitud
13 de la cadena / Mohamed Navas
longitud del carácter
https://riptutorial.com/es/home 85
encabezado y los
datos de la tabla de
la base de datos
PostgreSQL a un
archivo CSV
Expresiones de tabla
15 Daniel Lyons, Jakub Fedyczak, Kevin Sylvestre
comunes (CON)
EXTENSION dblink y
16 Riya Bansal, YCF_L
postgres_fdw
Fechas, sellos de
17 KIM, Nuri Tasdemir, Patrick, Tom Gerken
tiempo e intervalos
Funciones
18 Alison S, joseph, Kirill Sokolov, Patrick
agregadas
Funciones
19 criptográficas de Ben H, skj123
Postgres.
Funciones de
20 mnoronha, Vao Tsun
ventana
22 Herencia evuez
24 JUNTARSE Mokadillion
Programación con
25 AndrewCichocki, Ben H, Goerman, Laurenz Albe, Vao Tsun
PL / pgSQL
Script de respaldo
26 para un DB de bilelovitch
producción
27 SELECCIONAR YCF_L
https://riptutorial.com/es/home 86