Skip to content

why Postraphile isn't exposing the parent table instead of the partition tables. #2476

@divya-sk

Description

@divya-sk
CREATE TABLE xyz (
	id int4 GENERATED ALWAYS AS IDENTITY( INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE) NOT NULL,
	username varchar NOT NULL,
	favourites varchar NOT NULL,
	store_id varchar NOT NULL,
	realm text NULL
)
PARTITION BY LIST (store_id);
CREATE UNIQUE INDEX xyz_idx ON ONLY xyz USING btree (username, store_id, favourites);
COMMENT ON TABLE xyz IS '@name xyz
                    \n@omit\nupdate,delete\nTable alias for Postgraphile';




CREATE TABLE xyz_0596117 PARTITION OF xyz  FOR VALUES IN ('0596117');
CREATE UNIQUE INDEX 596117_username_store_id_favourites_idx ON xyz_0596117 USING btree (username, store_id, favourites);
COMMENT ON TABLE xyz596117 IS '@omit';

this is m,y postgraphile code

const express = require("express");
const { postgraphile } = require("postgraphile");
const app = express();
const jwt = require("express-jwt");
const jwksRsa = require("jwks-rsa");
const cors = require("cors");

app.use(express.json({ limit: "10mb" }));
app.use(express.urlencoded({ limit: "10mb" }));

require("dotenv").config();
app.use(function (req, res, next) {
  next();
});

app.use(cors());

const authErrors = (err, req, res, next) => {
  if (err.name === "UnauthorizedError") {
    res.status(err.status).json({ errors: [{ message: err.message }] });
    res.end();
  } else {
    console.log(err.message);
  }
};

app.use("/shield/graphql", authErrors, (req, res, next) => {
  let realm = req.headers["realm"];
  const JWKS_URI = process.env.KEYCLOAK_URL_RESOLVER.concat(
    realm,
    "/protocol/openid-connect/certs"
  );
  const ISSUER = process.env.KEYCLOAK_URL_RESOLVER.concat(realm);

  const options = {
    secret: jwksRsa.expressJwtSecret({
      cache: true,
      rateLimit: false,
      jwksRequestsPerMinute: 5,
      jwksUri: JWKS_URI,
    }),
    aud: "account",
    iss: ISSUER,
    algorithms: ["RS256"],
  };
  return jwt(options)(req, res, next);
});

app.use(
  postgraphile(process.env.DATABASE_URL, process.env.SCHEMA.split(","), {
    pgSettings(req) {
      var group = req.user.groupname;
      const settings = {};
      settings["role"] = req.user.realm_access.roles[0];
      console.log("defaultrole", req.user.realm_access.roles[0]);
      settings["jwt.claim.storeid"] = req.headers["storeid"];
      settings["jwt.claim.provenance"] = req.headers["provenance"];
      settings["jwt.claim.realm"] = req.headers["realm"];
      settings["jwt.claim.username"] = req.user.preferred_username;
      console.log("jwt.claim.username", req.user.preferred_username);

      const groupname = req.user.groupname;

      const ids = groupname.map((item) => item.split("/").pop()).join(",");
      settings["jwt.claim.accessiblestore"] = ids;

      return settings;
    },
    graphqlRoute: "/shield/graphql",
    graphiqlRoute: "/shield/graphiql",
    eventStreamRoute: "/shield/graphql/stream",
    ownerConnectionString: process.env.OWNER_CONNECTION_STRING,
    watchPg: true,
    graphiql: true,
    enhanceGraphiql: true,
    pgUsePartitionParents: true,
    enableCors: false,
    disableWarning: true,
    appendPlugins: [
      require("@graphile-contrib/pg-simplify-inflector"),
      require("postgraphile-plugin-connection-filter"),
    ],
  })
);

app.listen(process.env.PORT);

I need to show parent tables only postgraphile

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions