Git Product home page Git Product logo

pg-promise-prometheus-exporter's Introduction

GitHub Actions CI Status codecov Coverage Status Known Vulnerabilities npm downloads npm version npm license semver Conventional Commits renovate code style: prettier github stars

Prometheus Exporter for pg-promise

A prometheus exporter exposing metrics for pg-promise.

Available Metrics

As the exporter is utilizing the node-postgres-prometheus-exporter for the majority of the connection and pool usage metrics, please check the documentation for the list of metrics.

In addition the exporter provides the following metrics.

Metric Name Description Labels Since
pg_command_duration_seconds_bucket Duration of the executed command in seconds
  • host: The host of the database
  • database: The database name
  • command: Name of the command
  • status: SUCCESS or ERROR
    2.0.0
    pg_command_duration_seconds_sum The cumulated duration of the executed command in seconds
    • host: The host of the database
    • database: The database name
    • command: Name of the command
    • status: SUCCESS or ERROR
      2.0.0
      pg_command_duration_seconds_count Number of executed commands
      • host: The host of the database
      • database: The database name
      • command: Name of the command
      • status: SUCCESS or ERROR
        2.0.0
        pg_task_duration_seconds_bucket Duration of the executed task in seconds
        • host: The host of the database
        • database: The database name
        • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
          2.0.0
          pg_task_duration_seconds_sum Cumulated duration of the executed task in seconds
          • host: The host of the database
          • database: The database name
          • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
            2.0.0
            pg_task_duration_seconds_count Number of executed tasks
            • host: The host of the database
            • database: The database name
            • task: The tag as provided when executing the task. Note: The tag will be only added if it is a valid label value.
              2.0.0
              pg_transaction_duration_seconds_bucket Duration of the executed transactions in seconds
              • host: The host of the database
              • database: The database name
              • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                2.0.0
                pg_transaction_duration_seconds_sum Cumulated duration of the executed transactions in seconds
                • host: The host of the database
                • database: The database name
                • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                  2.0.0
                  pg_transaction_duration_seconds_count Number of executed transactions
                  • host: The host of the database
                  • database: The database name
                  • transaction: The tag as provided when executing the transaction. Note: The tag will be only added if it is a valid label value.
                    2.0.0

                    Example Output

                    Here an example output in the prometheus format of the provided metrics.

                    # HELP pg_client_errors_total The total number of connection errors with a database.
                    # TYPE pg_client_errors_total counter
                    pg_client_errors_total{host="localhost:5432",database="node_postgres_test1"} 1
                    
                    # HELP pg_client_disconnects_total The total number of disconnected connections.
                    # TYPE pg_client_disconnects_total counter
                    pg_client_disconnects_total{host="localhost:5432",database="node_postgres_test1"} 1
                    
                    # HELP pg_pool_connections_created_total The total number of created connections.
                    # TYPE pg_pool_connections_created_total counter
                    pg_pool_connections_created_total{host="localhost:5432",database="node_postgres_test1"} 19
                    
                    # HELP pg_pool_size The current size of the connection pool, including active and idle members.
                    # TYPE pg_pool_size gauge
                    pg_pool_size{host="localhost:5432",database="node_postgres_test1"} 10
                    
                    # HELP pg_pool_max The maximum size of the connection pool.
                    # TYPE pg_pool_max gauge
                    pg_pool_max{host="localhost:5432",database="node_postgres_test1"} 10
                    
                    # HELP pg_pool_active_connections The total number of active connections.
                    # TYPE pg_pool_active_connections gauge
                    pg_pool_active_connections{host="localhost:5432",database="node_postgres_test1"} 10
                    
                    # HELP pg_pool_waiting_connections The total number of waiting connections.
                    # TYPE pg_pool_waiting_connections gauge
                    pg_pool_waiting_connections{host="localhost:5432",database="node_postgres_test1"} 1
                    
                    # HELP pg_pool_idle_connections The total number of idle connections.
                    # TYPE pg_pool_idle_connections gauge
                    pg_pool_idle_connections{host="localhost:5432",database="node_postgres_test1"} 0
                    
                    # HELP pg_pool_errors_total The total number of connection errors with a database.
                    # TYPE pg_pool_errors_total counter
                    pg_pool_errors_total{host="localhost:5432",database="node_postgres_test1"} 1
                    
                    # HELP pg_pool_connections_removed_total The total number of removed connections.
                    # TYPE pg_pool_connections_removed_total counter
                    pg_pool_connections_removed_total{host="localhost:5432",database="node_postgres_test1"} 9
                    
                    # HELP pg_command_duration_seconds Timer of pg commands
                    # TYPE pg_command_duration_seconds histogram
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 21
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 31
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 38
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 3.475
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="SELECT",status="SUCCESS"} 40
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 8
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 14
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 18
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 2.116
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="BEGIN",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 0
                    pg_command_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 12
                    pg_command_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 17
                    pg_command_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 18
                    pg_command_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    pg_command_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 1.6620000000000001
                    pg_command_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",command="COMMIT",status="SUCCESS"} 20
                    
                    # HELP pg_task_duration_seconds Timer of pg tasks
                    # TYPE pg_task_duration_seconds histogram
                    pg_task_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",task="my-task"} 0
                    pg_task_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",task="my-task"} 8
                    pg_task_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",task="my-task"} 14
                    pg_task_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",task="my-task"} 18
                    pg_task_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    pg_task_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",task="my-task"} 2.139
                    pg_task_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",task="my-task"} 20
                    
                    # HELP pg_transaction_duration_seconds Timer of pg transactions
                    # TYPE pg_transaction_duration_seconds histogram
                    pg_transaction_duration_seconds_bucket{le="0.001",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.005",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.01",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.02",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.03",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.04",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.05",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.1",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 0
                    pg_transaction_duration_seconds_bucket{le="0.2",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 11
                    pg_transaction_duration_seconds_bucket{le="0.5",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 18
                    pg_transaction_duration_seconds_bucket{le="1",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="2",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="5",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="10",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_bucket{le="+Inf",host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20
                    pg_transaction_duration_seconds_sum{host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 5.142
                    pg_transaction_duration_seconds_count{host="localhost:5432",database="node_postgres_test1",transaction="my-transaction"} 20

                    Usage

                    Add Dependency

                    Add the following dependency to your project to download the package from npm.

                    npm i @christiangalsterer/pg-promise-prometheus-exporter

                    TypeScript

                    The following example illustrates how to use the exporter to enable monitoring for the pg-promise.

                    import pgPromise, { type IInitOptions, type IMain } from 'pg-promise'
                    import { Registry, collectDefaultMetrics } from 'prom-client'
                    import { monitorPgPromise } from '@christiangalsterer/pg-promise-prometheus-exporter'
                    
                    ...
                    
                    // set up pg-promise
                    const initOptions: IInitOptions = {/* initialization options */}
                    const pgp: IMain = pgPromise(initOptions)
                    const database: any = pgp(/* the connection parameter is either a configuration object or a connection string */)
                    
                    
                    // set up the prometheus client
                    const register = new Registry();
                    collectDefaultMetrics({ register })
                    
                    // monitor pg-promise
                    monitorPgPromise(database, initOptions, register)
                    
                    ...
                    
                    // connect to PostgreSQL *after* calling monitorPgPromise

                    JavaScript

                    The following example illustrates how to use the exporter to enable monitoring for pg-promise.

                    const promClient = require( 'prom-client');
                    const pgPromiseExporter = require('@christiangalsterer/pg-promise-prometheus-exporter')
                    
                    // set up pg-promise
                    const initOptions = {/* initialization options */};
                    const pgp = require('pg-promise')(initOptions);
                    const database = pgp(/* the connection parameter is either a configuration object or a connection string */)
                    
                    // set up the prometheus client
                    const collectDefaultMetrics = promClient.collectDefaultMetrics;
                    const Registry = promClient.Registry;
                    const register = new Registry();
                    collectDefaultMetrics({ register });
                    
                    // monitor pg-promise
                    pgPromiseExporter.monitorPgPromise(database, initOptions, register)
                    
                    // connect to Postgres *after* calling monitorPgPromise

                    Configuration

                    The exporter can be configured via properties specified on the optional parameter of type PgPromiseExporterOptions.

                    PgPromiseExporterOptions

                    property Description Example Since
                    defaultLabels Default labels added to each metrics. {'foo':'bar', 'alice': 3} 1.0.0

                    Event Handling

                    If there are already event handler registered for the events provided by pg-promise, the library will preserve the defined event handlers when the initOptions are initialized.

                    Grafana Dashboard

                    An example dashboard for Grafana is available here displaying the provided metrics by the exporter.

                    Here an example for pg-promise client metrics: Grafana:pg-promise client metrics

                    Here an example for pg-promise pool metrics: Grafana:pg-promise pool metrics

                    Here an example for pg-promise command metrics: Grafana:pg-promise command metrics

                    Here an example for pg-promise task metrics: Grafana:pg-promise task metrics

                    Here an example for pg-promise transaction metrics: Grafana:pg-promise transaction metrics

                    Changelog

                    The changes to project can be found in the changelog.

                    Compatibility

                    The following table list the compatibility of exporter versions with different pg-promise and prom-client versions.

                    Exporter Version pg-promise Version prom-client version
                    ^1.0.0 ^11.5.0 ^15.0.0

                    Contributions

                    Contributions are highly welcome. If you want to contribute to this project please follow the steps described in the contribution guidelines.

                    Projects Using The Exporter

                    If you want to support this project, please add a link to your project and/or company when you use this exporter.

                    Related Projects

                    If you are looking for a way to monitor your MongoDB Driver for Node.js you may have a look at https://github.com/christiangalsterer/mongodb-driver-prometheus-exporter.

                    If you are looking for a way to monitor KafkaJs for Node.js you may have a look at https://github.com/christiangalsterer/kafkajs-prometheus-exporter.

                    pg-promise-prometheus-exporter's People

                    Contributors

                    christiangalsterer avatar renovate[bot] avatar

                    Watchers

                     avatar  avatar

                    pg-promise-prometheus-exporter's Issues

                    Support to preserve attached event functions

                    If there are already functions registered for events, then those should be preserved and both the original function and the prometheus function be executed when the event occurred.

                    Dependency Dashboard

                    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

                    This repository currently has no open or pending branches.

                    Detected dependencies

                    github-actions
                    .github/workflows/build.yaml
                    .github/workflows/codecov.yaml
                    .github/workflows/coveralls.yaml
                    .github/workflows/pr_rebase.yaml
                    .github/workflows/publish.yaml
                    .github/workflows/release.yaml
                    .github/workflows/snyk.yaml
                    npm
                    package.json
                    • @christiangalsterer/node-postgres-prometheus-exporter ^1.3.0
                    • pg-promise ^11.5.5
                    • prom-client ^15.0.0
                    • @jest/globals 29.7.0
                    • @types/jest 29.5.12
                    • eslint-config-love 62.0.0
                    • eslint-plugin-jest 28.8.0
                    • eslint-plugin-simple-import-sort 12.1.1
                    • jest 29.7.0
                    • prettier 3.3.3
                    • renovate 38.39.6
                    • ts-jest 29.2.4
                    • typescript 5.5.4
                    • node >=18

                    • Check this box to trigger a request for Renovate to run again on this repository

                    Support monitoring multiple pools

                    If a project defines multiple pools or clients, it cannot use this library to monitor them. For example, more than 1 call to monitorPgPool will result in an error

                    A metric with the name pg_pool_connections_created_total has already been registered.
                    

                    because a new PgPoolPrometheusExporter is created each time, which defines metrics as properties to that instance.

                    Consider a project that might maintain a pool of instances to a DB with write access, and then a pool of instances to a read replica - you would want to monitor these 2 separate pools.

                    This could be resolved by letting a user of the library specify a prefix or inject a string into the name of the metrics? Or changing the metrics to be declared in a central place and then differentiate the metrics of different exporters by a label?

                    bug: Failed in exporter with pg-promise 11.9.0

                    Environment:

                    • nodejs - 20.9.0
                    • pg-promise 11.9.0
                    • pg-promise-prometheus-exporter 2.1.0

                    The code fails on the onReceive method when trying to get event.ctx.ctx.success.

                        onReceive(event) {
                            try {
                                if (event.result !== undefined) {
                                    this.commands.observe((0, utils_1.mergeLabelsWithStandardLabels)({ host: event.ctx.client.host + ':' + event.ctx.client.port, database: event.ctx.client.database, command: event.result.command, status: this.getStatus(event.ctx.ctx.success) }, this.options.defaultLabels), event.result.duration / 1000);
                                }
                            }
                            catch (error) {
                                console.error('An error occurred in the receive event handling', error);
                            }
                        }
                    

                    Stacktrace:

                    An error occurred in the receive event handling TypeError: Cannot read properties of undefined (reading 'success')
                        at PgPromisePrometheusExporter.onReceive (/Users/alex/Projects/my_api/node_modules/@christiangalsterer/pg-promise-prometheus-exporter/dist/pgPromisePrometheusExporter.js:98:248)
                        at Events.receive (/Users/alex/Projects/my_api/node_modules/pg-promise/lib/events.js:215:25)
                        at Query.<anonymous> (/Users/alex/Projects/my_api/node_modules/pg-promise/lib/query.js:181:40)
                        at Query.handleReadyForQuery (/Users/alex/Projects/my_api/node_modules/pg/lib/query.js:142:14)
                        at Client._handleReadyForQuery (/Users/alex/Projects/my_api/node_modules/pg/lib/client.js:312:19)
                        at Connection.emit (node:events:514:28)
                        at /Users/alex/Projects/my_api/node_modules/pg/lib/connection.js:117:12
                        at Parser.parse (/Users/alex/Projects/my_api/node_modules/pg-protocol/dist/parser.js:36:17)
                        at Socket.<anonymous> (/Users/alex/Projects/my_api/node_modules/pg-protocol/dist/index.js:11:42)
                    
                    

                    Recommend Projects

                    • React photo React

                      A declarative, efficient, and flexible JavaScript library for building user interfaces.

                    • Vue.js photo Vue.js

                      ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

                    • Typescript photo Typescript

                      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

                    • TensorFlow photo TensorFlow

                      An Open Source Machine Learning Framework for Everyone

                    • Django photo Django

                      The Web framework for perfectionists with deadlines.

                    • D3 photo D3

                      Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

                    Recommend Topics

                    • javascript

                      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

                    • web

                      Some thing interesting about web. New door for the world.

                    • server

                      A server is a program made to process requests and deliver data to clients.

                    • Machine learning

                      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

                    • Game

                      Some thing interesting about game, make everyone happy.

                    Recommend Org

                    • Facebook photo Facebook

                      We are working to build community through open source technology. NB: members must have two-factor auth.

                    • Microsoft photo Microsoft

                      Open source projects and samples from Microsoft.

                    • Google photo Google

                      Google โค๏ธ Open Source for everyone.

                    • D3 photo D3

                      Data-Driven Documents codes.