[HN Gopher] A word used only by Postgres developers
___________________________________________________________________
A word used only by Postgres developers
I came across a word in the Postgres source code that I'd never
seen before: "frammish".
https://github.com/postgres/postgres/blob/master/src/backend... :
> Therefore, they offer both exclusive and shared lock modes (to
support read/write and read-only access to a shared object). There
are few other frammishes. User-level locking should be done with
the full lock manager --- which depends on LWLocks to protect its
shared state. It sort of makes sense in context, as a "feature" or
a "flourish". It also appears on the pg_hackers mailing list: >
There has been some talk of separating the power to create new
users from the power of being superuser (although presumably only a
superuser should be allowed to create new superusers). If the
planned pg_role rewrite gets submitted before the 8.1 feature
freeze, I might look at adding that frammish into it. and here,
from 19 years ago: > And we get ragged on regularly for the non-
SQL-standard features we've inherited from Berkeley Postgres (eg,
the implicit-FROM frammish that was under discussion yesterday).
No amount of googling turns up a formal definition or usage outside
of the Postgres community. "frammish.org" doesn't seem to be
related. Are Postgres developers starting to evolve their own
dialect? Should we call an anthropologist?
Author : ccleve
Score : 187 points
Date : 2022-03-10 17:17 UTC (5 hours ago)
| throwaway894345 wrote:
| Wait until you hear what "cluster" means in Postgres-speak.
| legulere wrote:
| The same as in Microsoft SQL Server?
|
| https://docs.microsoft.com/en-us/sql/relational-databases/in...
| throwaway894345 wrote:
| No doubt lots of relational database software share this
| quirk.
| jelder wrote:
| Please go on.
| throwaway894345 wrote:
| > PostgreSQL uses the term cluster to refer to a "cluster" of
| databases, as opposed to the usual notion of a group of
| servers or VMs working in a co-ordinated fashion.
|
| https://www.opsdash.com/blog/postgresql-cluster.html
|
| Note that the "databases" above are logical databases, not
| _database hosts_.
| snthpy wrote:
| Thank you for this. I didn't realise this and for the past
| few years have been thinking that I seem to be the only one
| that runs only a single database host as everyone else
| seems to have "clusters". I never realised this just means
| multiple databases.
| pcthrowaway wrote:
| So according to this usage, one database instance with a
| few databases would be a cluster?
| throwaway894345 wrote:
| I'm not an expert, but as far as I can tell, even a
| single database instance with a single database (or maybe
| no databases at all?) could constitute a "cluster".
| pdpi wrote:
| A Postgres cluster is, roughly speaking, a server instance.
| That is, if you run two copies of postgres on the same box
| (One on the default 5432 port, another on, say, 6543) and
| have each of those copies manage its own independent config,
| data, etc, then those instances are what Postgres calls a
| cluster.
| munk-a wrote:
| Clustering is, besides all the other definitions you're
| seeing here, a table property. A clustered table is a table
| that has, on disk, been aligned with a certain index[1] -
| each table can only be clustered to a single index and it
| essentially means that row retrieval for that specific index
| is much more efficient, it basically gets you one covering
| index for free.
|
| 1. https://www.postgresql.org/docs/current/sql-cluster.html
| munk-a wrote:
| Or schema!
| sitharus wrote:
| The PostgreSQL usage of schema is consistent with the ANSI
| sql definition. MSSQL is the same.
| chungy wrote:
| I think most people surprised at the PostgreSQL model of
| databases and schemas are coming from a MySQL/MariaDB
| background where the terms are synonymous. PostgreSQL
| matches the model of basically every non-MySQL database
| when it comes to these concepts.
|
| Though if we talk about database weirdness, I never liked
| Oracle DB's insistence that databases and users are the
| same thing. Glad I haven't used it for well over a decade
| now :)
| chousuke wrote:
| I was actually surprised that you can query across
| databases in MySQL, but that makes sense once you
| understand that there's only one database and the
| "databases" are just schemas.
| progre wrote:
| Coming from MSSQL I was equally surprised that you _cant_
| query across databases in postgres even if they are on
| the the same server. Yeah there is the Foreign Data
| Wrapper thing but the DBA was very reluctant to enable it
| or whatever.
| pdpi wrote:
| Hmm, care to expand? The word schema, in Postgres terms,
| seems to mean exactly what I expect it to.
| jrockway wrote:
| I think people think schema means "a list of tables and
| indexes" but it's an actual object in postgres ("DROP
| SCHEMA public"). These do not diverge too far; that's what
| the object represents of course.
| throwaway894345 wrote:
| Most people think schema means "shape/structure of data",
| not "list of tables and indexes". In Postgres (or maybe
| SQL more broadly) it roughly means "a container for
| tables".
| chousuke wrote:
| Not just tables, but everything else as well. The shape
| and structure of your data is always defined _within_ a
| schema, and a single database may have more than one.
|
| A PostgreSQL server can contain multiple databases; they
| are independent and you can't access data in one database
| while connected to another (without dblink or something
| similar)
|
| As far as I know pretty much every database (and the SQL
| standard) except MySQL has schemas as an explicit
| database object and calls them that. What MySQL calls
| "databases" are actually schemas; they're just containers
| for database objects and you can query across them (and
| CREATE SCHEMA is an alias for CREATE DATABASE)
|
| EDIT:
|
| There's a fun trick you can do with multiple schemas that
| illustrate why they are schemas and not just "containers
| of things"
|
| You have a "data" schema that contains your table
| definitions; your actual, real data and indices etc. go
| here. Only privileged users can access this schema
| directly.
|
| Then you have an "interface" schema, that contains views
| and functions used by people; they can refer to the data
| schema, and with some clever view definitions, you can do
| it such that they can _only_ access the data using the
| views and functions in your interface schema.
|
| At some point, you could create an "interface_v2" schema
| that provides better (or more) methods for accessing your
| data that's backwards incompatible. Old applications can
| continue using the "interface" schema by setting their
| schema search path to "interface" (which would be the
| default), but new applications can "overlay" the schemas
| by setting their search path to "interface_v2,interface"
| and opt-in to new functionality. The "structure" of your
| data is changed simply by opting in to the new schema.
|
| It's pretty rare for people to do this (they understand
| versioned web APIs better than versioned database APIs),
| but it's a thing you can do.
| throwaway894345 wrote:
| > The shape and structure of your data is always defined
| within a schema
|
| Maybe we're already agreed on this, but for clarity my
| point is that the common notion of a schema is strictly
| "the shape of the data" and not "a container for the
| data, the shape of the data, and a bunch of other stuff".
| I agree that this latter definition is probably shared
| across many relational databases and not just Postgres.
| dragonwriter wrote:
| > but for clarity my point is that the common notion of a
| schema is strictly "the shape of the data" and not "a
| container for the data, the shape of the data, and a
| bunch of other stuff".
|
| Yeah, I see what you are saying I just disagree. Most
| people who know either use, in the context of RDBMSs,
| know both, and resolve the ambiguity by context. This is
| fairly normal, it's very common for words to have
| multiple common definitions.
| throwaway894345 wrote:
| In my experience, this is fairly "advanced" knowledge.
| Lots of people who grind out SQL queries all day as
| analysts or vanilla software engineers _don 't_ know the
| SQL sense of the term.
|
| > Most people who know either use, in the context of
| RDBMSs, know both, and resolve the ambiguity by context.
| This is fairly normal, it's very common for words to have
| multiple common definitions.
|
| The RDBMS domain alone doesn't suffice to resolve the
| ambiguity because "structure of data" and "container of
| tables/etc" are both relevant. I would definitely contend
| that application developers and operators (though
| _perhaps_ not DBAs) need to talk about "structure of
| data" a lot more than I need to talk about "container of
| tables/etc".
| throwaway894345 wrote:
| Normally, schema means "shape/structure of data". In
| Postgres it's roughly a container for tables.
| pdpi wrote:
| Ah I see. Postgres uses the word in the sense that it's
| used in the SQL spec, though, and it means pretty much
| what you're describing. The key difference is that I
| think you're talking about the human-readable file (which
| in the SQL world is written in SQL DDL), whereas the
| standard means it as closer to being the internal/runtime
| representation of that "shape/structure of data".
|
| It's helpful to think of "the database" as the actual
| physical storage, and the schema is what the db uses to
| make sense of how to manipulate/query that data. From
| that perspective, the SQL DDL is scripting language to
| manipulate those schema objects ("objects" in the OOP
| sense, "schema objects" has an actual specific meaning in
| SQL).
| dragonwriter wrote:
| > Normally, schema means "shape/structure of data". In
| Postgres it's roughly a container for logical databases.
|
| No, it's a namespace within a database, not a container
| for databases; this is not Postgres specific, it is part
| of the SQL standard and widely used in other
| implementations.
| throwaway894345 wrote:
| Yeah, you caught me between my post and my edit. I
| misspoke and said "logical databases" instead of
| "tables". I'm sure that's not precisely correct either,
| however.
| perlgeek wrote:
| The Raku language (formerly Perl 6) community also has its share
| of idioms, abbreviations (not just technical) and phrases. I'm
| not sure if they are exclusive to this community, or also used
| elsewhere.
|
| Examples:
|
| In the early days, many features were specified by Not Yet
| Implemented, so NYI became its own term.
|
| Error messages are meant to be awesome, so anything "Less Than
| Awesome" (LTA) was considered a bug.
|
| Larry Wall didn't like the term "void context", so he invented
| "sink context" instead (with all the puns related to it, of
| course).
|
| There were many more, though I have a hard time coming up with a
| longer list...
| deckard1 wrote:
| Perl has a history of this due to Larry Wall's background in
| linguistics. His Christian faith is also an influence. In Perl
| you can "bless" a reference to reify it into a class. The name
| Perl also comes from the bible apparently. Though you probably
| know this based on your username...
|
| Fortunately Perl was reasonable. On the other side of the
| spectrum you have the impenetrable and pretentiously obnoxious
| Urbit[1]
|
| [1] https://urbit.org/docs/glossary/moon
| reidjs wrote:
| bless is also a unix tool https://www.unix.com/man-
| page/osx/8/BLESS/
| LambdaComplex wrote:
| Urbit's documentation is like the Codex Seraphinianus but
| less understandable.
| thrtythreeforty wrote:
| Oh, hey, they have a glossary now. That's at least a nice
| affordance. Back when I last looked at Urbit you were
| expected to figure everything out like you were reading a
| cyberpunk novel.
|
| ...actually, now that I say it, "cyberpunk enthusiast" kinda
| resonates with the whole design of Urbit.
| warrenm wrote:
| I thought the etymology of "NYI" was more-or-less the same as
| "NIH" (not invented here) - namely, that it came out of Bell
| Labs somewhere along the line
|
| ...or, at least, that's what my CS prof claimed in the late 90s
| :)
| khy wrote:
| I've noticed that the docs sometimes use the verb "spell" in an
| interesting way, e.g. "IN GROUP is an obsolete spelling of IN
| ROLE."
| darrenf wrote:
| That's "spelling" the noun, not a verb.
| hunter2_ wrote:
| The verb form is where the atypical usage originates, so I
| think it's fair to focus on the verb as the point of interest
| despite including an example that happens to be a gerund.
|
| Anyway, I think there's an even larger set that "spell" is a
| member of: metaphorical usage to highlight anything unwanted
| or erroneous; "code smell" is another.
|
| It's wrong, therefore it smells. It's wrong, therefore it's
| misspelled. It's wrong, therefore it wants to be different
| (personification metaphor).
| warrenm wrote:
| And here I thought `"spelling" the noun` was a reference to
| either Tori or Aaron
| closeparen wrote:
| I've heard this before, e.g. Go's "while" loop is spelled "for"
| sundarurfriend wrote:
| I think that usage is a little bit more common eg., I believe
| I've seen it in Perl docs, and in rare StackOverflow answers.
| [deleted]
| SahAssar wrote:
| It's also used in libjpeg:
| https://github.com/kornelski/libjpeg/blob/master/libjpeg.doc...
|
| Maybe it's used as a sort of shibboleth and accidentally escaped
| internal communication into source code?
|
| It does not seem to be spreading very much, though.
| wyldfire wrote:
| Showing up on HN is a bit of a superspreader event.
| markstos wrote:
| Username checks out.
| saurik wrote:
| The original developer of libjpeg is Tom Lane, who is the same
| lead developer who uses this term at PostgreSQL.
|
| https://handwiki.org/wiki/Biography:Tom_Lane_(computer_scien...
| [deleted]
| trurl42 wrote:
| Likely a variant spelling of frammis;
| https://en.wiktionary.org/wiki/frammis
| JKCalhoun wrote:
| Thought it was a Carrollian invention: sort of like beamish,
| uffish, frumious...
| dorianmariefr wrote:
| Something, generally a device, for which one does not know the
| proper term
| layer8 wrote:
| Maybe I'll use that when I finally get around to writing a UI
| framework. ButtonFrammis, CheckboxFrammis, LabelFrammis,
| TextInputFrammis, ...
| munk-a wrote:
| Could frammish be a portmanteau then? Condensing "frammis-ish"
| to frammish - as in gizmo-like, maybe the thing you need to
| build which may or may not be a distinct component?
| ZeroGravitas wrote:
| Iterestingly, several of the Google Books results for Frammis
| are Joe Celko's SQL books, wonder if there's a connection.
| mindcrime wrote:
| Huh, curious. It clearly didn't _originate_ with Postgresql
| developers, as one can find uses of the word sprinkled around
| here and there in old literature. One neat way to see uses of it
| is to search on Google Books:
|
| https://www.google.com/search?tbm=bks&hl=en&q=%22frammish%22
|
| That said, I don't see anything that purports to give a
| definitive _definition_ of the word - everybody who uses it seems
| to assume that everyone else knows it. And at least at first
| blush, I don 't see anything that attempts to explain the origin
| / etymology of the word either.
|
| It's the kind of thing you'd almost expect to see in the "Jargon
| File" but it doesn't appear to be there either.
|
| http://catb.org/jargon/html/go01.html
| striking wrote:
| I recently caught out someone trying to hide their deep knowledge
| of Postgres when, in a moment of weakness as I mentioned one of
| the benefits of TOAST, he replied "I guess that's why they call
| it 'the best thing since sliced bread'".
|
| And that's when I knew.
|
| Because that's an exact quote from the docs.
|
| > This section provides an overview of TOAST (The Oversized-
| Attribute Storage Technique).
|
| > PostgreSQL uses a fixed page size (commonly 8 kB), and does not
| allow tuples to span multiple pages. Therefore, it is not
| possible to store very large field values directly. To overcome
| this limitation, large field values are compressed and/or broken
| up into multiple physical rows. This happens transparently to the
| user, with only small impact on most of the backend code. The
| technique is affectionately known as TOAST (or _"the best thing
| since sliced bread"_ ). The TOAST infrastructure is also used to
| improve handling of large data values in-memory.
|
| https://www.postgresql.org/docs/current/storage-toast.html
| swsieber wrote:
| I am not familiar with Postgreql.
|
| I would make that joke.
| reidjs wrote:
| I'm a little bit confused by the wording "This happens
| transparently to the user," I assume they mean that the user is
| unaware of this workaround? Or do they mean it's obvious how it
| works (transparent) to the user?
| bryanrasmussen wrote:
| ok, but Toast being the best thing since sliced bread is also a
| somewhat antiquated vernacular expression, I mean obviously the
| best thing since sliced bread is often used without toast as
| the thing being referred to but it was also often the case that
| toast was being referred to>
| https://www.theatlantic.com/health/archive/2012/02/how-the-p...
| gowld wrote:
| Toast predates machine-sliced bread, which is what "sliced
| bread" refers to. Sliced bread made toast better (easier to
| automate), but that doesn't make toast the best thing since
| sliced bread.
|
| The article you linked explains that "sliced bread" is the
| best thing, to which all later (not just bready) inventions
| are compared.
| bryanrasmussen wrote:
| are you really under the impression that vernacular
| expressions are always perfectly logical and thus showing
| how an expression would not be logical proves that it was
| never actually in common use?
| giaour wrote:
| Isn't the joke that the particular piece of toast always
| postdates the particular slice of bread it was made from?
| I.e., toast is the best thing since sliced bread because
| first we had sliced bread, and then we toasted it. It's a
| dumb dad joke
| glouwbug wrote:
| Yeah, maybe the guy just has a sense of humor - something
| that your average software developer would mistake for being
| a reference to documentation
| gowld wrote:
| This is wholly unnecessary.
| Izkata wrote:
| What's unnecessary, a sense of humor?
|
| ;)
| saurik wrote:
| Why would anyone try to "hide their deep knowledge of
| Postgres"? Like, I could easily see someone having to hide
| their deep knowledge of MongoDB--lest they be branded forever
| as "damaged"--but I've been under the impression that
| PostgreSQL skills are considered a really good thing this past
| decade or so... were they just really hoping to avoid becoming
| a database engineer, or were they maybe under threat of
| becoming an "on call" asset?
| hinkley wrote:
| Similarly I know a lot about software management because I
| saw that it affects everything I do, and I needed to be able
| to push back on bad management. Doesn't mean I want to be a
| project manager. No, I don't, and please stop asking.
|
| And there are tasks you took on at old jobs because they
| needed to get done and nobody else would do it, so you got
| stuck. You did them. Maybe you even did them well. But they
| aren't on your resume, because you don't want to do it again.
| And if you mention them as anecdotes, you are careful where
| and when you bring them up.
| [deleted]
| sam0x17 wrote:
| Though it's rare these days, there is still such a thing as
| being modest
| mmcgaha wrote:
| Sometimes it is better to be the student than the teacher.
| evilduck wrote:
| A few other scenarios:
|
| In an interview I don't want to be intimidating and feigning
| ignorance can give the candidate opportunity to shine. If
| they go deep, I can keep up and keep pushing, if they veer
| into bullshitting I can tell and gracefully conclude without
| offending anyone.
|
| As a manager, not disclosing depth lets me ask stupid
| questions more frequently and in more contexts (for the
| benefit of others, for when I forget something or don't
| understand something, as a Socratic teaching method, to help
| set the culture of asking questions, etc)
|
| Playing dumb is also a good way to avoid responsibility if
| you hate something, too, if a bit passive aggressive.
| brimble wrote:
| If you're specializing in something else but have knowledge
| of some other, unrelated thing, the latter is often at least
| _accidentally_ concealed because it rarely comes up. Further,
| one might _deliberately_ conceal it, to avoid having work
| assigned that distracts from the thing one is trying to focus
| on (for career development, personal preference, whatever
| reason).
|
| I've been known to pretend not to know a damn thing about
| WordPress, for instance. Even though I do.
| striking wrote:
| > were they maybe under threat of becoming an "on call" asset
|
| You got it. A previous role as a database firefighter was
| something this individual did not want to continue at their
| new workplace.
| dvtrn wrote:
| I've definitely done it for exactly this reason, and others
| mentioned in the thread: a strong desire to not suddenly
| become the ______ guy.
|
| Additional responsibility with no additional authority
| absolutely sucks when you get (a) pigeonholed, (b) saddled
| with every single request ever about _______ in addition to
| your other work or (c) some unholy combination of both.
|
| Especially when ______ only has enough "buy in" from
| decision makers to make the decision that you need to keep
| ______ alive because the business "needs"it but apparently
| not enough to properly source and acquire the necessary
| resources it needs compared to other business initiatives.
|
| Because "why do we need to do that? I thought you knew
| about ______ "
|
| Go figure. I'm quite done volunteering myself like that.
| JohnHaugeland wrote:
| "Oh, you're a computer programmer? Can you help me with my
| printer?"
|
| But difficult, and with consequences.
| fileeditview wrote:
| Hehe.. I once was asked to retrieve someones mail account
| (he lost is password)... sigh. People have all kinds of
| ideas what you can do if you are a programmer.
|
| Told him to contact the provider.
| arunnanda wrote:
| Printers can be harder, especially if you have driver
| trouble.
| 0xbadcafebee wrote:
| "Oh, you're a hacker? Can you help me with my printer?"
|
| I once extracted a PPD from a very expensive printer's
| firmware because the vendor didn't officially support
| Linux.
| pcthrowaway wrote:
| We could never get the damn things working in our office
|
| This was when I worked for HP
| mark-r wrote:
| I once fixed a bug caused by a faulty printer driver from
| HP. The driver changed the floating point control word
| and didn't change it back. Our program crashed while
| doing a completely innocuous operation, but only if you
| had printed to an HP printer earlier in the session.
| mikestew wrote:
| I remember that, because I worked on the MS FoxPro team
| at the time and report printing was crashing for a lot of
| users, but not all of them. Took forever to finally pin
| it down because, as parent comment points out, the
| culprit could have long left the building by the time the
| crash happens. Stupid driver sets the FPU to say "math
| errors like divide-by-zero are software's problem now,
| not mine" without telling software. IIRC (and this was
| over 20 years ago), operations had to be wrapped in/with
| the one line of code that flipped it back.
|
| But here's the thing: it wasn't just HP, it was a _lot_
| of print drivers. I suspected that there was some printer
| driver boilerplate out there, possibly even published by
| MS, that included this bug.
|
| (And, wow, did I swerve sharply into the off-topic lane
| for story time. Sorry.)
| popularonion wrote:
| If people ever start seeing you as "the database guy", you'll
| be pigeonholed into that slot as long as you remain in that
| team.
|
| Or maybe their manager was just a really big fan of Oracle or
| something. I don't know.
| jamil7 wrote:
| Same with anything to do with ops or deployment - better to
| hide that knowledge.
| pacificmint wrote:
| I used to work with a guy who was amazing with makefiles.
| After being burned once, ne made damn sure nobody at his
| new job knew about it.
| pklausler wrote:
| You know that you've matured in this business when you
| can feel no guilt when denying knowledge about something
| that you're an expert in.
| arthurjj wrote:
| Exactly. I was at one point an orgs "GDPR expert" which was
| fine work wise but not exactly what you want to be known
| for
| vjust wrote:
| Can confirm from experience. It took me years to shake that
| off and become known as a developer who could database. Its
| a function of whatever the team lacks. Once upon a time,
| DBA was a thing - I did manage to stay out of that deep
| pigeonhole luckily.
| bifrost wrote:
| DBA is absolutely still a thing, they fix things that
| developers make that deal with databases :)
| mdellavo wrote:
| Why would some be branded damaged because they have knowledge
| of a tool? That's ludicrous.
|
| I've used many databases including mongo. They are all tools
| like any other with pros and cons and having experience with
| multiple across domains is a boon.
| recursive wrote:
| It may be ludicrous, but it's not an uncommon point of
| view.
|
| "... teaching of BASIC should be rated as a criminal
| offence: it mutilates the mind beyond recovery"
|
| - Edsger W. Dijkstra
|
| https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/
| E...
| kamilm wrote:
| > Why would anyone try to "hide their deep knowledge of
| Postgres"?
|
| > or were they maybe under threat of becoming an "on call"
| asset?
|
| This is likely, especially if the person they're talking to
| tends to leech on other people's skills & time.
| markstos wrote:
| I'm working on seeding `backcompat` as a portmanteau of
| "backwards compatibility". Help me out, HN.
| kimixa wrote:
| I'm not sure how much seeding is needed - I've heard it used
| for years, and seems to have become a bit of a term for the
| Xbox previous generation game compatibility stuff.
| layer8 wrote:
| I'd go for backpat. ;)
| dmurray wrote:
| Or ytilibitapmoc.
| hluska wrote:
| I have a meeting with a couple of junior devs in about an hour.
| I'll use it in conversation and we'll see what happens. :)
| jyounker wrote:
| What group doesn't develop their own words over twenty years?
| ncmncm wrote:
| Betting it comes from the incantation "Frammin at the jim-jam,
| frippin in the krotz", repeated frequently in the US comic strip
| "Wizard of Id" by Brant Parker and Johnny Hart.
| notacoward wrote:
| My favorite like this is "impunge" from Gluster. It's used during
| repairs after a node has gone down and come back up. Files that
| are present but should have been deleted are expunged. Files that
| are absent but should be present are impunged from surviving
| replicas.
| jerf wrote:
| "Are Postgres developers starting to evolve their own dialect?
| Should we call an anthropologist?"
|
| This is a "jargon" term:
| https://linguistics.stackexchange.com/questions/2812/argot-v...
| petercooper wrote:
| "allballs" is another potential candidate:
| https://www.postgresql.org/message-id/20050124200645.GA6126%...
___________________________________________________________________
(page generated 2022-03-10 23:00 UTC)