{"id":26038,"library":"odata-v4-pg","title":"odata-v4-pg","description":"OData V4 to PostgreSQL query compiler that converts OData query segments ($filter, $select, $orderby, $expand, $skip, $top) into SQL statements for PostgreSQL. Version 0.1.1 is the latest, with sporadic releases. It differs from alternatives like odata-v4-mysql by targeting PostgreSQL, supporting all standard OData query options, and providing a simple createFilter function that returns { where, parameters } for direct use with the pg driver.","status":"active","version":"0.1.1","language":"javascript","source_language":"en","source_url":"https://github.com/jaystack/odata-v4-pg","tags":["javascript","OData","V4","sql","typescript"],"install":[{"cmd":"npm install odata-v4-pg","lang":"bash","label":"npm"},{"cmd":"yarn add odata-v4-pg","lang":"bash","label":"yarn"},{"cmd":"pnpm add odata-v4-pg","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Parses OData query strings into AST","package":"odata-v4-parser","optional":false},{"reason":"Converts AST into SQL statements","package":"odata-v4-sql","optional":false}],"imports":[{"note":"Works in both ESM and CJS; TypeScript types included.","wrong":"const createFilter = require('odata-v4-pg').createFilter","symbol":"createFilter","correct":"import { createFilter } from 'odata-v4-pg'"},{"note":"Alias for createFilter with additional query building.","wrong":"const createQuery = require('odata-v4-pg').createQuery","symbol":"createQuery","correct":"import { createQuery } from 'odata-v4-pg'"},{"note":"Class for full OData server integration; requires additional setup.","wrong":"const ODataServer = require('odata-v4-pg').ODataServer","symbol":"ODataServer","correct":"import { ODataServer } from 'odata-v4-pg'"}],"quickstart":{"code":"import { createFilter } from 'odata-v4-pg';\nimport { Client } from 'pg';\n\nconst client = new Client({ connectionString: process.env.DATABASE_URL ?? '' });\nawait client.connect();\n\nconst filter = createFilter(\"Id eq 42\");\nconst res = await client.query(`SELECT * FROM Users WHERE ${filter.where}`, filter.parameters);\nconsole.log(res.rows);\nawait client.end();","lang":"typescript","description":"Demonstrates parsing an OData $filter expression and executing the resulting SQL query against PostgreSQL."},"warnings":[{"fix":"Use filter.where for SQL clause and filter.parameters for parameterized values.","message":"createFilter() returns an object with `where` and `parameters` properties, not a SQL string directly.","severity":"breaking","affected_versions":">=0.0.0"},{"fix":"Avoid deep or multiple nested $expand queries; flatten relations manually.","message":"OData `$expand` support is limited to simple navigation properties; complex nested expands may not work.","severity":"gotcha","affected_versions":">=0.0.0"},{"fix":"Use `createFilter()` directly with your own Express endpoints.","message":"The `ODataServer` class from `odata-v4-server` is now deprecated in favor of standalone express middleware.","severity":"deprecated","affected_versions":">=0.1.0"},{"fix":"Always pass filter.parameters as query parameters to the pg client.","message":"Parameterized queries are required; do not concatenate filter.where into SQL strings to avoid injection.","severity":"gotcha","affected_versions":">=0.0.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Ensure $filter is a valid OData expression string (e.g., 'Id eq 42').","cause":"The OData filter string is invalid or empty.","error":"TypeError: Cannot destructure property 'where' of 'createFilter(...)' as it is undefined."},{"fix":"Use exact column names (e.g., 'id' instead of 'Id') or quote them accordingly.","cause":"Column names from $filter are case-sensitive and must match PostgreSQL schema exactly.","error":"error: column \"Id\" does not exist"},{"fix":"Install the latest version (npm install odata-v4-pg@latest) and use `import { createFilter } from 'odata-v4-pg'`.","cause":"Importing from wrong path or using incorrect version.","error":"Module 'odata-v4-pg' has no exported member 'createFilter'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}