Extension created for public schema not available within database So, I create the citext extension for schema public and I can see it's there, but then it's not available within the database in that schema. The database is in public as well, because it's created from the postgres user and no schema is specified at the creation. Here's a screenshot with some more data:


So, you can see that the extension is there, but once I connect to the database, it's not available anymore and I basically have to install it within the database. Any ideas how to make it available initially for the database as well?

PgSQL v9.6
Short answer

You are actually using (at least) two databases. You are installing CITEXT in the wrong one.

Longer answer

In the first database (whose name is not shown), you install CITEXT. This database is probably the postgres database, which is created by default when you install PostgreSQL.

Then you use the \c command and you switch to another database (sensordata). You need to create your extension in this database. 

That is, you should do:

\c sensordata 
CREATE EXTENSION citext;
\dx


If you need to use the citext module in more databases, you need to install it in each one. The extensions on the other databases don't matter. Databases do not interfere with each other.

Every PostgreSQL cluster (=database installation) has (by default) one database named postgres. If you use psql, it is the one to which you connect "by default". You don't actually need to have a postgres database. I guess the postgresdatabase is where you installed the CITEXT extension.

Within every PostgreSQL database, there is, by default, one public schema.



PostgreSQL does not work like (for instance) MySQL, where you can acces several databases at once through a single connection (provided you have a user with the right permissions). 

In PostgreSQL you access one database through a single connection. Within a database, you can access as many schemas as needed. The role that schemas play in PostgreSQL is nearly the same as the one played by a database in MySQL. 

See also:


Relationship between catalog, schema, user, and database instance
What's the difference between a catalog and a schema in a relational database?