3 Tabellen davon 2 Tabellen in der Haupttabelle übernehmen

Werbung:
Code:
\d+ patchpanel_equipment
                    Tabelle „public.patchpanel_equipment“
  Spalte    |   Typ   | Attribute | Speicherung | Statistikziel | Beschreibung
-------------+---------+-----------+-------------+---------------+--------------
portid      | integer | not null  | plain       |               |
equipmentnr | integer | not null  | plain       |               |
Indexe:
    "patchpanel_equipment_portid_key" UNIQUE CONSTRAINT, btree (portid, equipmentnr)
Fremdschlüssel-Constraints:
    "patchpanel_equipment_equipmentnr_fkey" FOREIGN KEY (equipmentnr) REFERENCES equipment(serial) ON UPDATE CASCADE ON DELETE CASCADE

Code:
alter table patchpanel_equipment add primary key using patchpanel_equipment_portid_key;

FEHLER:  Syntaxfehler bei „patchpanel_equipment_portid_key“
ZEILE 1: ... table patchpanel_equipment add primary key using patchpanel...

geht es nicht da ich 2 unique key`s habe oder ist hab ich wieder was falsch gemacht?
 
das wird jetzt etwas tricky.

Da die Tabelle mit dem Constraint definiert ist, kannst den Index nicht einfach so für einen PK nutzen:

Code:
test=# create table patchpanel_equipment (portid int not null, equipmentnr int not null, unique(portid,equipmentnr));
CREATE TABLE
test=*# \d patchpanel_equipment
  Tabelle »public.patchpanel_equipment«
  Spalte  |  Typ  | Sortierfolge | NULL erlaubt? | Vorgabewert
-------------+---------+--------------+---------------+-------------
 portid  | integer |  | not null  |
 equipmentnr | integer |  | not null  |
Indexe:
  "patchpanel_equipment_portid_equipmentnr_key" UNIQUE CONSTRAINT, btree (portid, equipmentnr)
test=*# alter table patchpanel_equipment add primary key using index patchpanel_equipment_portid_equipmentnr_key;
ERROR:  index "patchpanel_equipment_portid_equipmentnr_key" is already associated with a constraint

Wäre die Tabelle ohne Constraint erstell worden und der Index später:

Code:
test=*# create table patchpanel_equipment (portid int not null, equipmentnr int not null);
CREATE TABLE
test=*# create unique index patchpanel_equipment_portid_equipmentnr_key on patchpanel_equipment (portid, equipmentnr);
CREATE INDEX

ginge:

Code:
test=# alter table patchpanel_equipment add primary key using index patchpanel_equipment_portid_equipmentnr_key;
ALTER TABLE

Was kannst Du nun machen?

Code:
test=*# create table patchpanel_equipment (portid int not null, equipmentnr int not null, unique(portid,equipmentnr));
CREATE TABLE
test=*# \d+ patchpanel_equipment
  Tabelle »public.patchpanel_equipment«
  Spalte  |  Typ  | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung
-------------+---------+--------------+---------------+-------------+-------------+---------------+--------------
 portid  | integer |  | not null  |  | plain  |  |
 equipmentnr | integer |  | not null  |  | plain  |  |
Indexe:
  "patchpanel_equipment_portid_equipmentnr_key" UNIQUE CONSTRAINT, btree (portid, equipmentnr)

test=*# commit;
COMMIT
test=# create unique index CONCURRENTLY patchpanel_equipment_portid_equipmentnr_key_unique on patchpanel_equipment(portid, equipmentnr);
CREATE INDEX
test=# alter table patchpanel_equipment add primary key using index patchpanel_equipment_portid_equipmentnr_key_unique;
ALTER TABLE
test=*# \d+ patchpanel_equipment
  Tabelle »public.patchpanel_equipment«
  Spalte  |  Typ  | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung
-------------+---------+--------------+---------------+-------------+-------------+---------------+--------------
 portid  | integer |  | not null  |  | plain  |  |
 equipmentnr | integer |  | not null  |  | plain  |  |
Indexe:
  "patchpanel_equipment_portid_equipmentnr_key_unique" PRIMARY KEY, btree (portid, equipmentnr)
  "patchpanel_equipment_portid_equipmentnr_key" UNIQUE CONSTRAINT, btree (portid, equipmentnr)

Nun hast 2 Indexe, was natürlich schlecht ist, daher:

Code:
test=*# alter table patchpanel_equipment drop constraint patchpanel_equipment_portid_equipmentnr_key;
ALTER TABLE
test=*# \d+ patchpanel_equipment
  Tabelle »public.patchpanel_equipment«
  Spalte  |  Typ  | Sortierfolge | NULL erlaubt? | Vorgabewert | Speicherung | Statistikziel | Beschreibung
-------------+---------+--------------+---------------+-------------+-------------+---------------+--------------
 portid  | integer |  | not null  |  | plain  |  |
 equipmentnr | integer |  | not null  |  | plain  |  |
Indexe:
  "patchpanel_equipment_portid_equipmentnr_key_unique" PRIMARY KEY, btree (portid, equipmentnr)

test=*#

Voila, Ziel erreicht, und zwar ohne daß zu irgend einem Zeitpunkt der Unique Constraint aufgehoveb war und ohne einer völligen Sperre übder die Tabelle Dank create index concurrently.
 
Guten Morgen,

also du empfiehlst immer einen PK zu erstellen, da diese Tabelle schon erstellt worden ist (nicht von mir) habe ich eine kleine Frage dazu.
Ist es so das wenn es keinen PK gibt man die Tabelle nicht mit Daten befüllen kann, oder liegt es nur an der GUI das die Zeilen in der Tabelle sich nicht befüllen lassen ?
Deshalb hab ich dich gefragt wo die Daten herkommen die in der Tabelle sind ....aber ja ich weiss Glaskugel usw.

Wo exakt ist da das Problem? Du kannst alle Befehle in Dateien schreiben und diese Dateien dann in psql source, also ausführen. Die Datein kannst Du in einem Versions-Management verwalten.
Und wenn Du einen SQL-Dump machst (Hint: Backup) bekommst Du exakt dasselbe. Das kann ich also alles sogar völlig automatisieren, und muß nicht in einer GUI rumklicken.

Und so erstellst du dir für deine befehle Views und diese werden dann automatisch in den Views gespeichert?

CREATE VIEW Kunden

AS
SELECT
bewegdaten.Id,
bewegdaten.Name,
bewegdaten.Vorname,
stammdaten.OrtName as Ort

FROM Kunden_Archiv bewegdaten
JOIN Orte stammdaten ON bewegdaten.OrtId = stammdaten.Id

WHERE Land='DE'

WITH CHECK OPTION


Hab auch ein Dump erstellt , (Hint:Backup?)
pg_dump micky_db > pg_dump25.02.2018

wo findet man die pg_hba.conf um dort die zugriffsrechte einzustellen
Überall steht folgendes

Öffnen Sie die Datei "pg_hba.conf" in einem Texteditor.

aber wo ist die Datei ? oder langt es zB. nano pg_hba.conf ?

Hab gesucht und nix gefunden
cd /var/lib/postgresql/9.4/


danke und schönen Sonntag noch.
 
Zuletzt bearbeitet:
Du kannst auch ohne einen PK mit Insert Daten einfügen, manche GUIs setzen aber einen PK voraus, damit die Tabelle in der GUI editierbar ist.

Die pg_hba.conf findest Du durch fragen der Datenbank:

Code:
show hba_file;

innerhalb von psql, oder auch via

Code:
andreas@[local]:5433/test*# select setting from pg_settings where name = 'hba_file';;
  setting   
-------------------------------------
 /etc/postgresql/10/main/pg_hba.conf
(1 row)
 
ok danke,

wie machst du es wenn du über die eingabeaufforderung ein SELECT Befehl ausdrucken musst
z.B:
=# SELECT * FROM equip_login;

über die GUI hab ich es immer Exportiert und dann über Excel .

danke
 
ne denke nicht

printcap:


Code:
# /etc/printcap: printer capability database. See printcap(5).
# You can use the filter entries df, tf, cf, gf etc. for
# your own filters. See /etc/filter.ps, /etc/filter.pcl and
# the printcap(5) manual page for further details.

lp|Generic dot-matrix printer entry:\
        :lp=/dev/lp0:\
        :sd=/var/spool/lpd/lp:\
        :af=/var/log/lp-acct:\
        :lf=/var/log/lp-errs:\
        :pl#66:\
        :pw#80:\
        :pc#150:\
        :mx#0:\
        :sh:

# rlp|Remote printer entry:\
#         :lp=:\
#         :rm=remotehost:\
#         :rp=remoteprinter:\
#         :sd=/var/spool/lpd/remote:\
#         :mx#0:\
#         :sh:
 
auch egal. Du kannst die Ausgabe von psql in Datei umleiten und damit machen, was Du willst. Du kannst auch CSV rausblasen und das in Excel einwerfen.

Davon abgesehen habe ich bisher noch nicht oft vor der Aufgabe gestanden, etwas auszudrucken ;-)
 
Hi,

erstmal vielen Dank für die super beschriebene Lösung zum Problem mit dem Table Patchpanel_equipment. Nun kann ich endlich die Tabelle editieren. DANKE.


habe zwei fragen:

1. also hab es jetzt so hinbekommen das die User keinen Zugriff auf einige Datenbanken haben, allerdings sieht der User dennoch die Datenbanken-Namen über zB.: PGadmin gibt's eine Möglichkeit das er nur die DB sieht die für Ihm auch relevant ist, bzw. die er bearbeiten darf ?

2. ich kann mich über PGadmin ohne Password mit dem user postgres einloggen

pgAdmin:
user: postgres
maintaince db: postgres
password: -------- leer ------

über Terminal sieht es folgendermaßen aus:

Code:
LinuxServer~ # su - postgres
postgres@LinuxServer ~ $ psql
Passwort:

vielen Dank.
Gute Nacht.
 
Zuletzt bearbeitet:
Werbung:
Hi,

1. nur kosmetisch, finde es halt unschön wenn man alle Datenbanken sehen kann obwohl man nur 1. von z.B. 4. inoliert ist und bearbeiten kann.

2. ja, stimmt. Also ich wundere mich halt, wenn ich einem Kollegen die GUI installiere und er kompletten zugriff will muss er ja nur im PGadmin:

pgAdmin:
user: postgres
maintaince db: postgres
password: -------- leer ------

und hat Zugriff auf alles, das würde ich gerne unterbinden ?

er hat ja schließlich seinen eigenen DB Account und Rechte welche DB er bearbeiten kann.

Danke nochmal.
 
Zurück
Oben