Postgres.js: el cliente PostgreSQL con todas las funciones más rápido para Node.js

Blog

Postgres.js: el cliente PostgreSQL con todas las funciones más rápido para Node.js

Empezando

Buena experiencia de usuario con Postgres.js

manejo de redes sociales de celebridades

Instalar en pc

|_+_|

Usar

|_+_|

Opciones de conexión source-shell $ npm install postgres

Puede utilizar un source-js const postgres = require('postgres') const sql = postgres({ ...options }) // will default to the same as psql await sql` select name, age from users ` // > [{ name: 'Murray', age: 68 }, { name: 'Walter', age 78 }] cadena de conexión url o las opciones para definir las propiedades de conexión de su base de datos. Las opciones del objeto anularán cualquier presente en la URL.

|_+_|

Más información sobre postgres([url], [options]) La opción se puede encontrar en el Documentos de Node.js para las opciones de conexión tls

Consulta postgres:// source-js const sql = postgres('postgres://username:password@host:port/database', { host : '', // Postgres ip address or domain name port : 5432, // Postgres server port path : '', // unix socket path (usually '/tmp') database : '', // Name of database to connect to username : '', // Username of database user password : '', // Password of database user ssl : false, // True, or options for tls.connect max : 10, // Max number of connections timeout : 0, // Idle connection timeout in seconds types : [], // Array of custom types, see more below onnotice : fn // Defaults to console.log onparameter : fn // (key, value) when server param change debug : fn // Is called with (connection, query, parameters) transform : { column : fn, // Transforms incoming column names value : fn, // Transforms incoming row values row : fn // Transforms entire rows }, connection : { application_name : 'postgres.js', // Default application_name ... // Other connection parameters } })

Una consulta siempre devolverá un ssl que se resuelve en una matriz sql o -> Promise dependiendo del tipo de consulta. Desestructurar es genial para acceder de inmediato al primer elemento.

|_+_|

Parámetros de consulta

Postgres infiere y maneja automáticamente los parámetros, por lo que la inyección de SQL no es posible. No es necesario un manejo especial, simplemente use los literales de plantilla etiquetados JS como de costumbre.

|_+_|

Corriente Promise [...]

Si desea manejar las filas devueltas por una consulta una por una, puede usar null que devuelve una promesa que se resuelve una vez que no hay más filas.

|_+_|

Escuche y notifique

Cuando llame a escuchar, se establecerá automáticamente una conexión dedicada para garantizar que reciba notificaciones en tiempo real. Esta conexión se utilizará para escuchar más llamadas.

|_+_|

La notificación se puede hacer como de costumbre en sql, o usando el source-js const [new_user] = await sql` insert into users ( name, age ) values ( 'Murray', 68 ) returning * ` // new_user = { user_id: 1, name: 'Murray', age: 68 } método.

|_+_|

Ayudantes de consultas dinámicas source-js let search = 'Mur' const users = await sql` select name, age from users where name like ${ search + '%' } ` // users = [{ name: 'Murray', age: 68 }]

Postgres.js tiene una forma segura y ergonómica de ayudarlo a escribir consultas. Esto hace que sea más fácil escribir inserciones dinámicas, selecciones, actualizaciones y consultas donde.

Insertar

|_+_|

Se traduce en una consulta segura como esta:

|_+_|

Varias inserciones en una consulta

Si necesita insertar varias filas al mismo tiempo, también es mucho más rápido hacerlo con un solo sql. Simplemente pase una matriz de objetos a .stream(fn) -> Promise.

|_+_|

Matrices .stream

Postgres tiene un tipo de matriz nativa que es similar a las matrices js, pero Postgres solo permite el mismo tipo y forma para elementos anidados. Este método infiere automáticamente el tipo de elemento y traduce las matrices js en matrices de Postgres.

|_+_|

JSON source-js await sql` select created_at, name from events `.stream(row => { // row = { created_at: '2019-11-22T14:22:00Z', name: 'connected' } }) // No more rows

|_+_|

Consulta de archivo source-js sql.listen('news', payload => { const json = JSON.parse(payload) console.log(json.this) // logs 'is' })

Usando un sql.notify archivo para una consulta. El contenido se almacenará en la memoria caché para que el archivo solo se lea una vez.

|_+_|

Actas

COMIENZO / COMPROMISO sql.notify('news', JSON.stringify({ no: 'this', is: 'news' }))

Llamar a comenzar con una función devolverá una Promesa que se resuelve con el valor devuelto por la función. La función proporciona un único argumento que es sql() inside tagged template con un contexto de la transacción recién creada. source-js const user = { name: 'Murray', age: 68 } sql` insert into users ${ sql(user) } ` se llama automáticamente, y si la Promesa falla source-sql insert into users (name, age) values (, ) sera llamado. Si tiene éxito insert sera llamado.

|_+_|

SAVEPOINT sql()

|_+_|

Tenga en cuenta que a menudo puede lograr el mismo resultado utilizando source-js const users = [{ name: 'Murray', age: 68, garbage: 'ignore' }, { name: 'Walter', age: 78 }] sql` insert into users ${ sql(users, 'name', 'age') } ` consultas (Expresiones de tabla comunes) en lugar de utilizar transacciones.

Tipos

Puede agregar soporte ergonómico para tipos personalizados, o simplemente pasar un objeto con un sql.array(Array) firma que contiene Postgres source-js const types = sql` insert into types ( integers, strings, dates, buffers, multi ) values ( ${ sql.array([1,2,3,4,5]) }, ${ sql.array(['Hello', 'Postgres']) }, ${ sql.array([new Date(), new Date(), new Date()]) }, ${ sql.array([Buffer.from('Hello'), Buffer.from('Postgres')]) }, ${ sql.array([[[1,2],[3,4]][[5,6],[7,8]]]) }, ) ` para el tipo y el valor serializado correctamente.

Agregar ayudantes de consulta es el enfoque recomendado que se puede hacer de esta manera:

|_+_|

Desmontaje / Limpieza

Para garantizar un desmontaje y una limpieza adecuados en los reinicios del servidor, utilice sql.json(object) antes de source-js const body = { hello: 'postgres' } const [{ json }] = await sql` insert into json ( body ) values ( ${ sql.json(body) } ) returning body ` // json = { hello: 'postgres' }

Llamando sql.file(path, [args], [options]) -> Promise rechazará nuevas consultas y devolverá una Promesa que se resuelve cuando todas las consultas terminan y las conexiones subyacentes están cerradas. Si se proporciona un tiempo de espera, las consultas pendientes se rechazarán una vez que se alcance el tiempo de espera y se destruirán las conexiones.

cómo retirar de la billetera de confianza

Apagado de muestra usando Prexit

|_+_|

Consultas inseguras sql

Si sabe lo que está haciendo, puede utilizar source-js sql.file(path.join(__dirname, 'query.sql'), [], { cache: true // Default true - disable for single shot queries or memory reasons }) para pasar cualquier cadena que le gustaría postgres. Tenga en cuenta que esto puede provocar una inyección de SQL si no tiene cuidado.

|_+_|

Errores

Todos los errores se envían a consultas relacionadas y nunca de forma global. Los errores que proceden de Postgres siempre están en el formato nativo de Postgres , y lo mismo ocurre con cualquier Errores de Node.js p.ej. procedente de la conexión subyacente.

También existen los siguientes errores específicamente para esta biblioteca.

MESSAGE_NOT_SUPPORTED

X (X) no es compatible

Siempre que se reciba un mensaje de Postgres que no sea compatible con esta biblioteca. No dude en presentar un problema si cree que falta algo.

MAX_PARAMETERS_EXCEEDED

Se superó el número máximo de parámetros (65534)

El protocolo postgres no permite más de 65534 (16 bits) parámetros. Si se encuentra con este problema, existen varias soluciones, como usar sql.begin(fn) -> Promise para escapar de los valores en lugar de pasarlos como parámetros.

SASL_SIGNATURE_MISMATCH

El tipo de mensaje X no es compatible

Cuando se usa la autenticación SASL, el servidor responde con una firma al final del flujo de autenticación que debe coincidir con la del cliente. Esto es para evitar hombre en el medio ataca . Si recibe este error, la conexión se canceló porque el servidor no respondió con la firma esperada.

NOT_TAGGED_CALL

Consulta no llamada como un literal de plantilla etiquetado

La realización de consultas debe realizarse utilizando la función sql como plantilla etiquetada . Esto es para garantizar que los parámetros se serialicen y pasen a Postgres como parámetros de consulta con los tipos correctos y para evitar la inyección de SQL.

trucos y consejos javascript
AUTH_TYPE_NOT_IMPLEMENTED

Tipo de autenticación X no implementado

Postgres admite muchos tipos de autenticación diferentes. Este no es compatible.

CONEXIÓN CERRADA

escribir host CONNECTION_CLOSED: puerto

Este error se produce si la conexión se cerró sin error. Esto no debería suceder durante el funcionamiento normal, así que cree un problema si fue inesperado.

CONNECTION_ENDED

escribir host CONNECTION_ENDED: puerto

Este error se produce si el usuario ha llamado sql y realizó una consulta posteriormente.

CONNECTION_DESTROYED

escribir host CONNECTION_DESTROYED: puerto

Este error se produce para las consultas que estaban pendientes cuando se agotó el tiempo de espera para BEGIN fue alcanzado.

# node-js #postgres #databaese # desarrollo web #postgresql