私は、Postgraphql 3.10 を Postgresql バージョン 9.6 データベースで使用することから、Postgraphile バージョン 4.7.0 および Postgresql バージョン 11 データベースを使用することへの GraphQL アプリの移行に取り組んでいます。
以下のgraphqlクエリは、古いバージョンでは機能していましたが、新しいバージョンでは失敗しました。
query supplier($id: Int!) {
supplierById(id: $id) {
id accountId
title intro description
imageBg imageProfile imageProfileRot
rating status
productsBySupplierId(condition: {published: true, deleted: false}) {
nodes {
id type prodTitle prodDescr
price currency duration { hours minutes }
}
}
reviewsBySupplierId(condition: {target: SUPPLIER}) {
nodes {comment rating createdAt}
}
}
}
失敗は条件フィルターが原因であり、次のようなエラー メッセージが表示されます。
"GraphQLError: Field \"published\" is not defined by type ProductCondition."
"GraphQLError: Field \"deleted\" is not defined by type ProductCondition."
"GraphQLError: Field \"target\" is not defined by type ReviewCondition."
この条件をサポートするようにデータベース テーブルを設定する方法に関するドキュメントが見つかりません。この条件をサポートするために、Postgraphile の一部のインデックスにフィールドの公開、削除、およびターゲットを追加する必要がありますか?
Express アプリの Postgraphile 設定
app.use( postgraphile( `postgres://${account}:${passwd}@localhost:5432/${database}`, schema, {
pgDefaultRole: '*****_anonymous',
dynamicJson: true,
jwtSecret: Buffer.from( secret, 'hex' ).toString(),
jwtPgTypeIdentifier: '*****.jwt_token',
enableCors: true,
disableQueryLog: false,
graphiql: config.web.graphiql,
graphqlRoute: config.web.graphql,
graphiqlRoute: '/qtest',
subscriptions: true,
watchPg: true,
setofFunctionsContainNulls: false,
ignoreRBAC: false,
ignoreIndexes: false,
showErrorStack: "json",
extendedErrors: ['severity', 'code', 'detail', 'hint', 'position', 'internalPosition', 'internalQuery', 'where', 'schema', 'table', 'column', 'dataType', 'constraint', 'file', 'line', 'routine'],
//extendedErrors: ["hint", "detail", "errcode"],
//appendPlugins: [require("@graphile-contrib/pg-simplify-inflector")],
exportGqlSchemaPath: "schema.graphql",
sortExport: true,
enhanceGraphiql: true,
allowExplain(req) {
// TODO: customise condition!
return true;
},
enableQueryBatching: true,
disableDefaultMutations:false,
legacyRelations: "omit"
} ) )