* Don't use prefix import as it breaks in old nodes. This is a one time fix for #3577 because its easy to do. node < v16 is not supported.
* Update docs
* 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>
* test: Add failing test for parser reader cleanup
* fix: Avoid retaining buffer for latest parse in reader
The buffer can be arbitrarily large, and the parser shouldn’t keep it around while waiting on (and potentially also buffering) the next complete packet.
These object-mode rows don’t include a `length`. Dead code since 721cf56eb331bd35243c1425095b98cf09adf814 (“Rows are now associative arrays rather than straight arrays.”)?
* Make active query a private prop
* Make client.queryQueue private (with deprecation)
* Deprecate some legacy features
* Update packages/pg/lib/client.js
Co-authored-by: Charmander <~@charmander.me>
---------
Co-authored-by: Brian Carlson <brian.carlson@getcruise.com>
Co-authored-by: Charmander <~@charmander.me>
* feat(pg-connection-string): warn if non-standard ssl options are used
In preparation for v3.0.0, we start warning users to be explicit about
the sslmode they want.
* Update index.js
* fix(pg-protocol): specify number of result column format codes
Fixes a bug when binary format. We must specify both:
- the number of result column format codes
- the result column format codes
The text format case was working by accident. When using text format, the
intention was to set the format code to 0. Instead, we set the number
of result column format codes was set to 0. This is valid because it indicates
that all result columns should use the default format (text).
When using binary format, the intention was to set the format code to 1.
Instead, we set the number of result column format codes to 1.
Importantly, we never set a result column format code. This caused an
error: 'insufficient data left in message'.
We now always set the number of result column format codes to '1'. The
value of '1' has special meaning:
> or one, in which case the specified format code is applied to all result columns (if any)
We then set a single column format code based on whether the connection
(or query) is set to binary.
Fixes#3487
* fix(pg): use a Buffer when parsing binary
The call to parseArray was not working as expected because the value was
being sent as a string instead of a Buffer. The binary parsers in
pg-types all assume the incoming value is a Buffer.
* Pass callback to client.end
* Add test for pool.end method
* fix: remove excessive _pulseQueue call
* fix: context problem
* fix: test resolve should be called when the last client is removed
* fix: wait for pool.end()
Because when you don't pass a callback to .end() it always returns a promise
* fix: handle idle timeout test data race
---------
Co-authored-by: Asadbek Raimov <asadbekraimov642@gmail.com>
* change instanceof to isDate
* use both methods to check for valid Date
* add test for PR 2862
* use only isDate(date) in place of instanceof Date
* Extend compatibility of `isDate` use back to Node 8
* Clean up test
---------
Co-authored-by: Charmander <~@charmander.me>
Reviewed-by: Charmander <~@charmander.me>