Postgres sssssssssssssssssssssssssss
ssssssssssssssss
Guia de atajos
Tipos de datos generales Operadores de Strings y funciones
Tipo Alias Descripción Operador
Descripción
Función
bigint int8 Entero de ocho bytes
con signo || Concatena dos o más strings
bit [ (n) ] Cadena de bits de
longitud ja CONCAT( ) Une dos o más strings
bit varying varbit [ (n) ] Cadena de bits de LOWER( ) Resultado en minúscula
[(n)] longitud variable
boolean bool Booleano lógico UPPER( ) Resultado en mayúscula
(verdadero/falso)
LENGTH( ) Número de caracteres del string
character varchar[(n)] Cadena de
varying [(n)] caracteres de
longitud variable
POSITION Buscar ‘term' en el campo y retorna
( 'term' in eld ) el ind
date Fecha del calendario
Remueve los espacios iniciales y
(año, mes, día) TRIM( text )
nales del string (ltrim, rtrim)
integer int, int4 Entero de cuatro
bytes con signo
json Datos JSON Operadores matemáticos y funciones
textuales
Operador
Descripción
money Cantidad de moneda Función
numeric [(p, s)] decimal[(p,s)] Numérico exacto de
+ Sumar
precisión
seleccionable - Restar
smallint int2 Entero de dos bytes * Multiplicar
con signo
Dividir (divisiones entre enteros
smallserial serial2 Entero de dos bytes /
autoincrementable
cortan el resultado)
% Resultado de la división
serial serial4 Entero de cuatro
bytes
autoincrementable ROUND( v, p ) Redondea el valor y precisión decimal
text Cadena de
caracteres de
longitud variable Operadores de Comparación
time [ (p) ] Hora del día (sin Operador
[ without time zona horaria) Descripción
zone ]
Función
= ¿Son los valores iguales?
time [ (p) ] timetz Hora del día, incluida
with time zone la zona horaria ¿Es el valor de la izquierda es más
>
timestamp Fecha y hora (sin
grande que el de la derecha?
[ (p) ] zona horaria) ¿Es el valor de la izquierda más
[ without time <
zone ] grande que el de la derecha?
¿Es el valor de la derecha mayor o
>=
timestamp timestamptz Fecha y hora, igual al de la derecha?
[ (p) ] with incluida la zona
time zone horaria ¿Es el valor de la izquierda mayor o
<=
igual al de la derecha?
uuid Identi cador único
universal IN ¿El valor se encuentra en la lista?
xml Datos XML
NOT IN El valor no se encuentra en la lista
Postgresql Docs Cursos y cupones en fernando-herrera.com
fi
fi
fi
fi
Postgres sssssssssssssssssssssssssss
ssssssssssssssss
Guia de atajos
<> ¿Los valores no son iguales? SEQUENCE Secuencia personalizada única
!= ¿Los valores no son iguales? gen_random_uuid( ) UUID en formato V4
BETWEEN
El valor se encuentra entre estos Ejemplo de SERIAL primary key
dos valores.
CREATE TABLE books (
El valor no se encuentra entre estos id SERIAL PRIMARY KEY,
NOT BETWEEN
dos valores. title VARCHAR(100) NOT NULL,
Realiza la veri cación si el primary_author VARCHAR(100) NULL
IS NULL );
resultado o campo es nulo
El término de búsqueda contiene
LIKE Ejemplo de secuencia
un patrón especi co
El término de búsqueda NO CREATE SEQUENCE books_sequence
NOT LIKE start 2
contiene un patrón especi co
increment 2;
Operadores lógicos INSERT INTO books
(id, title)
Operador Descripción VALUES
( nextval('books_sequence'), 'TheHobbit' );
Ambas condiciones se deben de
AND
cumplir
OR
Una de las condiciones se tiene que En de nición de tabla
cumplir CREATE TABLE Students (
Depende de donde se use, pero en id bigint DEFAULT nextval('integer_id_seq')
NOT PRIMARY KEY,
general es una negación. name VARCHAR(200) not NULL
);
Tabla lógica CREATE TABLE Students (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
name VARCHAR(200) not NULL
a b a AND b a OR b );
TRUE TRUE TRUE TRUE CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
DROP EXTENSION "uuid-ossp";
TRUE FALSE FALSE TRUE
TRUE NULL NULL TRUE Ejemplos de cláusulas
FALSE FALSE FALSE FALSE
Between
FALSE NULL FALSE NULL SELECT * FROM "users"
NULL NULL NULL NULL
WHERE "id" BETWEEN 2 AND 4;
Tabla lógica de NOT Case
SELECT "name", "salary",
a NOT a CASE
WHEN "salary" > 6000 THEN 'Salario mayor a 6000$'
WHEN "salary" > 4000 THEN 'Salario mayor a 4000$'
TRUE FALSE WHEN "salary" >= 2000 THEN 'Salario mayor a 2000$'
ELSE 'Salario menor a 2000$'
END AS "Salary information"
FALSE TRUE FROM "users";
NULL NULL Comentarios
-- Single-line comment
Primary Keys automáticas /*
Multi-line
Tipo Descripción comment
*/
Serie valores numéricos
SERIAL
correlativos
Postgresql Docs Cursos y cupones en fernando-herrera.com
fi
fi
fi
fi
Postgres sssssssssssssssssssssssssss
ssssssssssssssss
Guia de atajos
Comandos comunes Group by y Count
SELECT COUNT(name) AS user_count, "country"
FROM "users2"
Crear base de datos GROUP BY "country"
CREATE DATABASE “database_name"; ORDER BY user_count DESC;
CREATE DATABASE IF NOT EXISTS "productsDB";
Like Statements
Crear tabla SELECT * FROM “users"
CREATE TABLE "users" ( -- Nombre inicie con J mayúscula
id SERIAL, WHERE "name" LIKE 'J%';
name VARCHAR(100) NOT NULL,
role VARCHAR(15) NOT NULL, -- Nombre inicie con Jo
PRIMARY KEY (id) WHERE "name" LIKE 'Jo%';
);
-- Nombre termine con hn
WHERE "name" LIKE '%hn';
Crear vista y destruir vista -- Nombre tenga 3 letras y las últimas
CREATE OR REPLACE [MATERIALIZED] VIEW 2
"v_spain_users" AS -- tienen que ser "om"
SELECT "name", "email" FROM "users" WHERE "name" LIKE '_om'; // Tom
WHERE "country" = 'Spain';
-- Puede iniciar con cualquier letra
DROP [MATERIALIZED] VIEW "v_spawn_users"; -- seguido de "om" y cualquier cosa
después
WHERE "name" LIKE '_om%'; // Tomas
Eliminar registros
DELETE FROM "table_name"
WHERE "column_name" = some_value; Limit y O set
SELECT * FROM "users"
LIMIT 5
Inserciones OFFSET 10;
INSERT INTO "table_name"
("column1", "column2", "column3", ...)
VALUES
("value1", "value2", "value3", ...);
Order by
SELECT "column1", "column2", ...
-- Múltiples FROM "table_name"
ORDER BY "column1", ... ASC|DESC;
INSERT INTO "table_name"
("column1", "column2", "column3", …)
VALUES
("value1", "value2", "value3", ...), Select Distinct
("value1", "value2", "value3", ...),
("value1", "value2", "value3", ...), SELECT DISTINCT "country"
...; FROM "users";
Contar registros en tabla y Having
Actualizar registros
UPDATE "users" select count(*) from photos
SET
"name" = 'Christopher' , select count(*), “column"
"role" = 'admin' from "table"
WHERE "id" = 2; GROUP by "column"
HAVING count(*) > 3
Postgresql Docs Cursos y cupones en fernando-herrera.com
ff
Postgres sssssssssssssssssssssssssss
ssssssssssssssss
Guia de atajos
Funciones de agregación JOINS - Uniones de tablas
Visualisation SQL Query
Function Description
Valores de entrada,
incluidos los nulos, SELECT * FROM table_a A
array_agg(expression)
concatenados en una JOIN table_b B
matriz ON A.key = B.key
El promedio (media
aritmética) de todos los
avg(expression)
valores de entrada no
nulos
Número de las de SELECT * FROM table_a A
count(*) LEFT JOIN table_b B
entrada
ON A.key = B.key
Número de las de
entrada para las que el
count(expression)
valor de expresión no es
nulo
Agrega valores, incluidos
json_agg(expression) SELECT * FROM table_a A
valores nulos, como una
RIGHT JOIN table_b B
matriz JSON ON A.key = B.key
Valor máximo
de expresión en todos los
max(expression)
valores de entrada no
nulos
Valor mínimo SELECT * FROM table_a A
de expresión en todos los FULL OUTER JOIN table_b B
min(expression) ON A.key = B.key
valores de entrada no
nulos
Valores de entrada no
string_agg( nulos concatenados en
expression, delimiter) una cadena, separados
por delimitador SELECT *
FROM table_a A
LEFT JOIN table_b B ON
Suma de expresión en A.key = B.key
sum(expression) todos los valores de WHERE B.key IS NULL
entrada no nulos
Funciones condicionales
Function Description SELECT *
FROM table_a A
coalesce(ANY Devuelve el primero de sus RIGHT JOIN table_b B
REPEATED) argumentos que no es nulo ON A.key = B.key
WHERE A.key IS NULL
greatest(ANY Devuelve el valor más grande de una
lista de cualquier número de
REPEATED)
expresiones
SELECT * FROM table_a A
least(ANY Devuelve el valor más pequeño de una FULL OUTER JOIN table_b B
lista de cualquier número de ON A.key = B.key
REPEATED) WHERE B.key IS NULL OR
expresiones.
A.key IS NULL
nullif(value1 ANY, Devuelve un valor nulo si valor1 es
igual a valor2; de lo contrario, devuelve
value2 ANY)
valor1.
Postgresql Docs Cursos y cupones en fernando-herrera.com
fi
fi
Postgres
Guia de atajos
PLPGSQL + CTE
Funciones personalizadas Procedimientos almacenados
Sintaxis general: CREATE OR REPLACE PROCEDURE
proc_name ( [args type] ) AS
CREATE [OR REPLACE] FUNCTION
$$
function_name([arguments type])
DECLARE
RETURNS return_datatype as $$
-- variables
DECLARE
BEGIN
< Declaración de variables >
-- cuerpo
BEGIN
END;
< Cuerpo de la función >
$$ LANGUAGE plpgsql;
RETURN < Valor >
END; LANGUAGE plpgsql;
call proc_name( 'valores' );
Ejemplo:
CREATE OR REPLACE FUNCTION
Triggers
greet_employee( emp_name varchar )
create or REPLACE TRIGGER <name>
RETURNS varchar AFTER UPDATE on "user"
AS $$ FOR EACH ROW
BEGIN —Opcional when
RETURN 'Hola ' || emp_name; WHEN (OLD.field IS DISTINCT FROM NEW.field)
END; — Procedimiento/Función a ejecutar
EXECUTE FUNCTION create_session_log();
$$
LANGUAGE plpgsql;
create or REPLACE FUNCTION <name>()
RETURNS TRIGGER as $$
select greet_employee('Fernando'); BEGIN
— Cuerpo de la función
return NEW;
Common Table Expression (CTE) END;
with cte_name as ( $$ LANGUAGE plpgsql;
select <campos> from <tabla>....
), [cte_name_2] as ()...
select * from cte_name; PgCrypto
CREATE EXTENSION pgcrypto;
Recursivo
-- Nombre de la tabla en memoria insert into "user" (username, password)
-- campos que vamos a tener values(
WITH RECURSIVE countdown( val ) as ( 'melissa',
-- initialización => el primer nivel, crypt( '123456', gen_salt('bf') )
o valores iniciales );
-- values(5)
select 10 as val select count(*) from "user"
UNION where username='fernando' and
-- Query recursivo password = crypt('123456', password);
select val - 1 from countdown where
val > 1
)
-- Select de los campos
select * from countdown;
Postgresql Docs Cursos y cupones en fernando-herrera.com