mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
* Set default PostgreSQL user to 'postgres' to avoid Deno env access errors Currently, the pg package defaults the database user to process.env.USER (or USERNAME on Windows). This causes errors when running in Deno without --allow-env, as environment access is restricted. This PR changes the default user to 'postgres', so: - Node.js behavior is unchanged when a user is explicitly provided in config. - Deno users no longer hit NotCapable errors for environment access. - Avoids relying on process.env for default values. Example: Before: user: process.platform === 'win32' ? process.env.USERNAME : process.env.USER, After: user: 'postgres', // default user, avoids using process.env * Prioritize config values over environment variables in ConnectionParameters Previously, ConnectionParameters would first check process.env for connection settings before using the provided config object. This could cause errors in environments like Deno where environment access is restricted. This change updates the val function to: 1. Use the value from config if it is defined. 2. Fall back to environment variables only if config does not provide a value. 3. Use default values if neither config nor environment variables are set. This ensures that explicitly provided configuration values are always respected, avoiding unnecessary errors in restricted environments. * Wrap NODE_PG_FORCE_NATIVE check in try/catch for Deno compatibility Replace the `typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined'` check with a try/catch to safely handle environments like Deno without `--allow-env`. - Keeps Node.js behavior unchanged. - Prevents errors when accessing process.env in Deno. - Preserves lazy loading of the native module. * Make default database user Deno-safe Wrap the default database user assignment in a try/catch to prevent errors when environment access is restricted (e.g., in Deno). - Uses process.env.USER / USERNAME on Node if available - Falls back to 'postgres' when env access fails or is unavailable - Maintains code structure and comments - Ensures Node tests continue to pass while preventing Deno runtime errors * Fixing checks pass * Update packages/pg/lib/connection-parameters.js Co-authored-by: Charmander <~@charmander.me> * fix(pg): only guard process.env access when forcing native client --------- Co-authored-by: Charmander <~@charmander.me>
92 lines
2.4 KiB
JavaScript
92 lines
2.4 KiB
JavaScript
'use strict'
|
|
|
|
let user
|
|
try {
|
|
user = process.platform === 'win32' ? process.env.USERNAME : process.env.USER
|
|
} catch {
|
|
// ignore, e.g., Deno without --allow-env
|
|
}
|
|
|
|
module.exports = {
|
|
// database host. defaults to localhost
|
|
host: 'localhost',
|
|
|
|
// database user's name
|
|
user,
|
|
|
|
// name of database to connect
|
|
database: undefined,
|
|
|
|
// database user's password
|
|
password: null,
|
|
|
|
// a Postgres connection string to be used instead of setting individual connection items
|
|
// NOTE: Setting this value will cause it to override any other value (such as database or user) defined
|
|
// in the defaults object.
|
|
connectionString: undefined,
|
|
|
|
// database port
|
|
port: 5432,
|
|
|
|
// number of rows to return at a time from a prepared statement's
|
|
// portal. 0 will return all rows at once
|
|
rows: 0,
|
|
|
|
// binary result mode
|
|
binary: false,
|
|
|
|
// Connection pool options - see https://github.com/brianc/node-pg-pool
|
|
|
|
// number of connections to use in connection pool
|
|
// 0 will disable connection pooling
|
|
max: 10,
|
|
|
|
// max milliseconds a client can go unused before it is removed
|
|
// from the pool and destroyed
|
|
idleTimeoutMillis: 30000,
|
|
|
|
client_encoding: '',
|
|
|
|
ssl: false,
|
|
|
|
application_name: undefined,
|
|
|
|
fallback_application_name: undefined,
|
|
|
|
options: undefined,
|
|
|
|
parseInputDatesAsUTC: false,
|
|
|
|
// max milliseconds any query using this connection will execute for before timing out in error.
|
|
// false=unlimited
|
|
statement_timeout: false,
|
|
|
|
// Abort any statement that waits longer than the specified duration in milliseconds while attempting to acquire a lock.
|
|
// false=unlimited
|
|
lock_timeout: false,
|
|
|
|
// Terminate any session with an open transaction that has been idle for longer than the specified duration in milliseconds
|
|
// false=unlimited
|
|
idle_in_transaction_session_timeout: false,
|
|
|
|
// max milliseconds to wait for query to complete (client side)
|
|
query_timeout: false,
|
|
|
|
connect_timeout: 0,
|
|
|
|
keepalives: 1,
|
|
|
|
keepalives_idle: 0,
|
|
}
|
|
|
|
const pgTypes = require('pg-types')
|
|
// save default parsers
|
|
const parseBigInteger = pgTypes.getTypeParser(20, 'text')
|
|
const parseBigIntegerArray = pgTypes.getTypeParser(1016, 'text')
|
|
|
|
// parse int8 so you can get your count values as actual numbers
|
|
module.exports.__defineSetter__('parseInt8', function (val) {
|
|
pgTypes.setTypeParser(20, 'text', val ? pgTypes.getTypeParser(23, 'text') : parseBigInteger)
|
|
pgTypes.setTypeParser(1016, 'text', val ? pgTypes.getTypeParser(1007, 'text') : parseBigIntegerArray)
|
|
})
|