Hoe selecteer je een schema in postgres bij gebruik van psql?

Ik heb een postgres-database met meerdere schema’s. Wanneer ik verbinding maak met de database vanuit een shell met psqlen ik voer \dtuit, dan gebruikt het het standaard verbindingsschema dat publicis. Is er een vlag die ik kan specificeren of hoe kan ik het schema wijzigen?


Antwoord 1, autoriteit 100%

In PostgreSQL bepaalt het systeem welke tabel wordt bedoeld door een zoekpad te volgen, een lijst met schema’s waarin moet worden gezocht.

De eerste overeenkomende tabel in het zoekpad wordt beschouwd als de gewenste tabel, anders wordt er een fout gegenereerd als er geen overeenkomst is, zelfs als er overeenkomende tabelnamen bestaan ​​in andere schema’s in de database.

Om het huidige zoekpad te tonen kun je het volgende commando gebruiken:

SHOW search_path;

En om het nieuwe schema in het pad te plaatsen, zou je kunnen gebruiken:

SET search_path TO myschema;

Of als u meerdere schema’s wilt:

SET search_path TO myschema, public;

Referentie: https://www.postgresql.org /docs/current/static/ddl-schemas.html


Antwoord 2, autoriteit 42%

\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.

Antwoord 3, autoriteit 37%

Wilt u de database wijzigen?

\l - to display databases
\c - connect to new database

Bijwerken.

Ik heb uw vraag opnieuw gelezen.
Schema’s weergeven

\dn - list of schemas

Als u het schema wilt wijzigen, kunt u het proberen

SET search_path TO

Antwoord 4, autoriteit 11%

Gebruik schemanaam met punt in de psql-opdracht om informatie over dit schema te verkrijgen.

Instellen:

test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE

Lijst met relaties weergeven in test_schema:

test=# \dt test_schema.
               List of relations
   Schema    |     Name     | Type  |  Owner   
-------------+--------------+-------+----------
 test_schema | test_table   | table | postgres
 test_schema | test_table_2 | table | postgres
(2 rows)

Toon test_schema.test_tabledefinitie:

test=# \d test_schema.test_table
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Toon alle tabellen in test_schema:

test=# \d test_schema.
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 
Table "test_schema.test_table_2"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

enz…


Antwoord 5, autoriteit 8%

als u in psql typt, typt u gewoon

set schema 'temp';

en daarna \d toont alle relaties in “temp


Antwoord 6, autoriteit 6%

Dit is oud, maar ik heb exports in mijn alias gezet om verbinding te maken met de database:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"

En voor een ander schema:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"

Antwoord 7, autoriteit 3%

sleutelwoord:

SET search_path TO

voorbeeld:

SET search_path TO your_schema_name;

Antwoord 8, autoriteit 3%

een snelle oplossing zou kunnen zijn:

SELECT your_db_column_name from "your_db_schema_name"."your_db_tabel_name";

Antwoord 9

als je met psql in docker exec speelt, doe het dan zo:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name

Antwoord 10

PostgreSQL 14 Debian

   [email protected]:~$ psql
psql (14.0 (Debian 14.0-1.pgdg100+1))
Type "help" for help.
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create schema tests;
CREATE SCHEMA
test=# \dt
Did not find any relations.
test=# create table pubtable (id integer);
CREATE TABLE
test=# create table tests.schematable (id integer);
CREATE TABLE
test=# \dt
          List of relations
 Schema |   Name   | Type  |  Owner
--------+----------+-------+----------
 public | pubtable | table | postgres
(1 row)
test=# \dt tests.
Did not find any relation named "tests.".
test=# \dt tests
Did not find any relation named "tests".
test=# \dt 'tests.'
Did not find any relation named "tests.".
test=# \dt 'tests.*'
            List of relations
 Schema |    Name     | Type  |  Owner
--------+-------------+-------+----------
 tests  | schematable | table | postgres
(1 row)
test=# \dt 'tests*'
Did not find any relation named "tests*".
test=# \dt 'tests.*'
            List of relations
 Schema |    Name     | Type  |  Owner
--------+-------------+-------+----------
 tests  | schematable | table | postgres
(1 row)

Idem voor \dv enz. om de weergaven in het schema te zien

Other episodes