postgres

package
v1.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2023 License: LGPL-3.0 Imports: 17 Imported by: 0

Documentation

Overview

Funciones de gestión para POSTGRESQL usando el driver pgxpool

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func AcquireConnection

func AcquireConnection() (conn *pgxpool.Conn, err error)

Obtiene una conexión del pool

func CommitTX

func CommitTX(tx pgx.Tx)

Finaliza una transacción

Example
tx := StartTX()
defer RollbackTX(tx)
// ... órdenes SQL contenidas en la transacción ...
CommitTX(tx)
Output:

INFO: StartTX
INFO: CommitTX

func DeleteRow

func DeleteRow(id string, table string)

Elimina una fila en una tabla cuya pk sea 'id uuid' Panic si la fila no existe

Example
u := T_personal{}
u.Operador, _ = parse.ParseUUID(UUIDoperador)
u.Codigo = "Test"
u.Nombre = "Usuario de prueba"
u.Activo = true
u.ID = InsertRow(u, "hash='zecreto2023'")
fmt.Println("Una fila insertada")
DeleteRow(u.ID, "personal")
fmt.Println("Una fila eliminada")
Output:

INFO: insert into personal (operador,codigo,nombre,hash,activo,administrador) values ('0cec7694-eb8d-4ab2-95bb-d5d733a3be94','Test','Usuario de prueba','zecreto2023',true,false) returning id
Una fila insertada
INFO: delete from personal where id='81c11fc2-0439-4ae5-baa4-3d40716bdce3'
Una fila eliminada

func GetFirstRow

func GetFirstRow(dst any, query string, params ...any) bool

Función de utilidad que devuelve la primera fila de una consulta (devuelve true). Si no hay filas, devuelve false. Panic si la query no contiene la cláusula "order by".

Example
u := struct {
	Codigo string
	Activo bool
}{}
if GetFirstRow(&u, "select codigo,activo from personal order by codigo") {
	fmt.Printf("Primer usuario hallado: %q\n", u.Codigo)
}
if !GetFirstRow(&u, "select codigo,activo from personal where id=$1 order by codigo", UUIDnoexiste) {
	fmt.Printf("Ningún usuario hallado.\n")
}
Output:

INFO: select codigo,activo from personal order by codigo
Primer usuario hallado: "pablo"
INFO: select codigo,activo from personal where id='fe90b951-9999-9999-9999-999999999999' order by codigo
Ningún usuario hallado.

func GetOneOrZeroRows

func GetOneOrZeroRows(dst any, query string, params ...any) bool

Función de utilidad para consultas que solo pueden devolver una (resultado true) o ninguna filas (resultado false). Panic si la query devuelve mas de una fila.

Example
u := struct {
	Codigo string
	Activo bool
}{}
if GetOneOrZeroRows(&u, "select codigo,activo from personal where id=$1", UUIDempleado) {
	fmt.Printf("Hallado usuario: %q\n", u.Codigo)
}
if !GetOneOrZeroRows(&u, "select codigo,activo from personal where id=$1", UUIDnoexiste) {
	fmt.Printf("Usuario no hallado.\n")
}
Output:

INFO: select codigo,activo from personal where id='fe90b961-0646-4f8e-a698-d3a153abf7d2'
Hallado usuario: "pablo"
INFO: select codigo,activo from personal where id='fe90b951-9999-9999-9999-999999999999'
Usuario no hallado.

func GetOneRow

func GetOneRow(dst any, query string, params ...any)

Función de utilidad para consultas que devuelven exactamente una fila. dst puede ser la direccion de una struct o de una variable simple Panic si la query devuelve mas de una fila o no devuelve ninguna fila.

Example
u := struct {
	Codigo string
	Activo bool
}{}
GetOneRow(&u, "select codigo,activo from personal where id=$1", UUIDempleado)
fmt.Println(u)
Output:

INFO: select codigo,activo from personal where id='fe90b961-0646-4f8e-a698-d3a153abf7d2'
{pablo true}

func GetOrderedRows

func GetOrderedRows(dst any, query string, params ...any)

Función de utilidad para consultas que pueden devolver varias filas. Panic si la query no contiene un "order by".

Example
us := []string{}
GetOrderedRows(&us, "select codigo from personal where operador=$1 order by codigo limit 3", UUIDoperador)
fmt.Printf("Primeros 3 usuarios hallados: %s\n", strings.Join(us, ", "))
Output:

INFO: select codigo from personal where operador='0cec7694-eb8d-4ab2-95bb-d5d733a3be94' order by codigo limit 3
Primeros 3 usuarios hallados: pablo, palevi, secreto

func InitPool

func InitPool(connectString string, logger *errores.Logger)

Conecta a la base de datos y establece el logger. Si el logger es nil, todos los mensajes se meustran por consola.

func InsertRow

func InsertRow(src any, especiales ...string) string

Inserta una fila en una tabla cuyo nombre sea el del tipo de src (T_nombretabla) y que tenga una pk (id uuid). Especial contiene una lista de campos a excluir o incluir de la insercion:

campo => solo se inserta este campo y otros explicitamente incluidos.
-campo => se excluye este campo de la inserción.
campo=expresion => se inserta este campo con esta expresion.

Por ejemplo si especial es "-inicio","final=now()","parking=null" se excluye inicio, final=hora actual y parking=nulo. Devuelve el id de la fila insertada.

Example
u := T_personal{}
u.Operador, _ = parse.ParseUUID(UUIDoperador)
u.Codigo = "Test"
u.Nombre = "Usuario de prueba"
u.Activo = true
u.ID = InsertRow(u, "hash='zecreto2023'")
fmt.Println("Una fila insertada")
DeleteRow(u.ID, "personal")
fmt.Println("Una fila eliminada")
Output:

INFO: insert into personal (operador,codigo,nombre,hash,activo,administrador) values ('0cec7694-eb8d-4ab2-95bb-d5d733a3be94','Test','Usuario de prueba','zecreto2023',true,false) returning id
Una fila insertada
INFO: delete from personal where id='81c11fc2-0439-4ae5-baa4-3d40716bdce3'
Una fila eliminada

func ReleaseConnection

func ReleaseConnection(conn *pgxpool.Conn)

Devuelve una conexión al pool

func RollbackTX

func RollbackTX(tx pgx.Tx)

Aborta una transacción

Example
tx := StartTX()
defer RollbackTX(tx)
// ... órdenes SQL contenidas en la transacción ...
CommitTX(tx)
Output:

INFO: StartTX
INFO: CommitTX

func StartTX

func StartTX() pgx.Tx

Comienza una transacción

Example
tx := StartTX()
defer RollbackTX(tx)
// ... órdenes SQL contenidas en la transacción ...
CommitTX(tx)
Output:

INFO: StartTX
INFO: CommitTX

func UpdateRow

func UpdateRow(src any, especiales ...string)

Actualiza una fila en una tabla cuyo nombre sea el del tipo de src (T_nombretabla) y que tenga una pk (id uuid) Especial contiene una lista de campos a incluir o excluir de la actualización:

campo => solo se actualiza este campo y otros explicitamente incluidos.
-campo => se excluye este campo de la actualización.
campo=expresion => se actualiza este campo con esta expresion.

Por ejemplo si especial es "-inicio","final=now()","parking=null" se excluye inicio, final=hora actual, parking=nulo y la tabla a actualizar es otra Panic si la fila no existe

Example
u := T_personal{}
GetOneRow(&u, "select * from personal where id=$1", UUIDempleado)
fmt.Println("Usuario cargado")
u.Codigo = "pablo"
UpdateRow(u, "codigo")
fmt.Println("Nombre actualizado")
Output:

INFO: select * from personal where id='fe90b961-0646-4f8e-a698-d3a153abf7d2'
Usuario cargado
INFO: update personal set codigo='pablo' where id='fe90b961-0646-4f8e-a698-d3a153abf7d2'
Nombre actualizado

Types

type TipoErrorSQL

type TipoErrorSQL int
const (
	NON_SQL                        TipoErrorSQL = 0
	SQL_OTHER                      TipoErrorSQL = 1
	INTEGRITY_CONSTRAINT_VIOLATION TipoErrorSQL = 2
	PL_PGSQL_RAISE_EXCEPTION       TipoErrorSQL = 3
)

func GetErrorSQL

func GetErrorSQL(err error) (TipoErrorSQL, string)

Determina el tipo de error SQL https://www.postgresql.org/docs/13/errcodes-appendix.html

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL