Documentation
¶
Overview ¶
Funciones de gestión para POSTGRESQL usando el driver pgxpool
Index ¶
- func AcquireConnection() (conn *pgxpool.Conn, err error)
- func CommitTX(tx pgx.Tx)
- func DeleteRow(id string, table string)
- func GetFirstRow(dst any, query string, params ...any) bool
- func GetOneOrZeroRows(dst any, query string, params ...any) bool
- func GetOneRow(dst any, query string, params ...any)
- func GetOrderedRows(dst any, query string, params ...any)
- func InitPool(connectString string, logger *logger.Logger)
- func InsertRow(src any, especiales ...string) string
- func ReleaseConnection(conn *pgxpool.Conn)
- func RollbackTX(tx pgx.Tx)
- func StartTX() pgx.Tx
- func UpdateRow(src any, especiales ...string)
- type TipoErrorSQL
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AcquireConnection ¶
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 ¶
Elimina una fila en una tabla cuya pk sea 'id uuid' Panic si la fila no existe
Example ¶
u := T_personal{} u.Operador, _ = formato.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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
Conecta a la base de datos y establece el logger. Si el logger es nil, todos los mensajes se meustran por consola.
func InsertRow ¶
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, _ = formato.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 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 ¶
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