You can easily hide or rename fields that you don't want exposed, override their behavior in Node, and add generated columns or fancy SQL mutations either in JS or directly in your DB and have them exposed as you'd expect in GQL.
With a commonly-used plugin, you can even do rich ORM-like queries directly from graphql, like:
query {
allPeople(filter: {
firstName: { startsWith:"John" }
}) {
nodes {
firstName
lastName
posts(filter: {
createdAt: { greaterThan: "2016-01-01" }
}) {
nodes {
title
body
}
}
}
}
}
More examples here: https://github.com/graphile-contrib/postgraphile-plugin-conn...(Personally, I think their docs are good at telling you how to use it but fairly bad at showing how great the tool is)