# View Ã¼ber eine 10GB groÃŸe Tabelle?

**URL:** <https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961>\
**Category:** Allgemeines\
**Created:** [6. Februar 2008 um 19:27 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961 "2008-02-06T19:27:53Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [6. Februar 2008 um 19:27 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/1 "2008-02-06T19:27:53Z")

</div>

Hi, und zwar hab ich eine Tabelle, die ca. 50 mio datensätze mit sich bringt. Jetzt möchte ich einen bestimmten Wert für bestimmte Nutzer nicht zugänglich machen (d.h. nicht sperren/verbieten, sondern eher als 0-Wert deklarieren).  
D.h. wenn ein “select hidden\_field from table” kommt, soll für einen bestimmten nutzer der Wert 0 sein und für einen anderen User der richtige wert.

Sollte das nicht funktionieren, könnte man doch einen View anlegen und in diesem View das feld als 0-Feld nach außen freigeben - die Frage ist hierbei, wieviel speed geht bei einer solch großen Tabelle (für an View) flöten…  
  
  
Würde mich über ein paar Ideen freuen.

---

<div class="post-metadata">

**Author:** ![anon56673172](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/dfb087/32.png) [@anon56673172](https://www.pg-forum.de/u/anon56673172)\
**Post date:** [7. Februar 2008 um 09:01 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/2 "2008-02-07T09:01:26Z")

</div>

Also für das Problem hab ich mal diese Lösung gefunden. Bei mir funktioniert es auch so. Man macht eine View die alle sehen können und diese ist mit einer Regel belegt das Person X - wenn sie die Rechte auf die Tabelle hat, alles sehen kann und falls nicht null für definierte Felder zurückgegeben wird.

Wie es mit der Performance aussieht kann ich dir allerdings nicht sagen. Das wissen andere bestimmt besser “schiel(Akretschmer, ads)”.

Hier der Link

[http://www.pg-forum.de/benutzer-rechteverwaltung/1172-view-oder-tabelle-je-nach-user.html](http://www.pg-forum.de/benutzer-rechteverwaltung/1172-view-oder-tabelle-je-nach-user.html)

Gruss Waldi

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 11:26 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/3 "2008-02-07T11:26:04Z")

</div>

Alles klar, danke. Würd mich auch für die performance interessieren..

Wie werden denn Views angelegt? Sind sie noch bestandteil der Lokalen Tabelle oder werden sie wirklich 1zu1 erstellt?.. das würde heißen, dass nochmals 10GB beansprucht werden? ![:confused:](https://www.pg-forum.de/uploads/default/original/1X/2de57563fce1c161bdd76f6ef65cd5db07f74914.png "verwirrt")

---

<div class="post-metadata">

**Author:** ![anon56673172](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/dfb087/32.png) [@anon56673172](https://www.pg-forum.de/u/anon56673172)\
**Post date:** [7. Februar 2008 um 11:31 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/4 "2008-02-07T11:31:20Z")

</div>

Im Prinzip sind Views nichts anderes als Abfragen die ansprechbar sind wie Tabellen. Also würden nicht noch einmal 10 GB anfallen. So etwas ist aber auch schnell erstellt. Dann kannst du ja die Geschwindigkeit testen. Ich meine Geschwindigkeiteinbussen die man nicht bemerkt sind ja kein Problem.

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 11:41 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/5 "2008-02-07T11:41:32Z")

</div>

hi, jep werd ich versuchen. besten dank.

Kleine frage hätte ich noch.

```nohighlight
current_user

```

gibt es auch ne möglichkeit die gruppe von diesem user auszulesen.

---

<div class="post-metadata">

**Author:** ![anon56673172](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/dfb087/32.png) [@anon56673172](https://www.pg-forum.de/u/anon56673172)\
**Post date:** [7. Februar 2008 um 16:22 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/6 "2008-02-07T16:22:02Z")

</div>

Also ich hab da keine Funktion dafür gefunden aber das ist auch nicht weiter schlimm weil du die Rechtezuweisung in Gruppen organisieren kannst. Die Regel funktioniert so: Wenn der momentane Benutzer rechte auf die Tabelle XYZ hat dann zeige alles an, wenn nicht gib für die und die Felder null zurück. Somit kannst du einer ganzen Gruppe Rechte auf die Tabelle geben, die sehen dann alles und die anderen nur das was du definiert hast. Abfragen tust du im übrigen immer die View.

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 16:27 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/7 "2008-02-07T16:27:37Z")

</div>

Okay hört sich soweit vernünftig an. die view’s funktionieren auch wunderbar mit 2-4 GB Tabellen.

Kurze Frage, wie frag ich ab, ob der User rechte für den view hat?

---

<div class="post-metadata">

**Author:** ![anon56673172](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/dfb087/32.png) [@anon56673172](https://www.pg-forum.de/u/anon56673172)\
**Post date:** [7. Februar 2008 um 16:41 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/8 "2008-02-07T16:41:43Z")

</div>

Ich glaube wir reden aneinander vorbei. Ich hab mir den Thread nochmal angeschaut und da steht meine Lösung mit der View und der Tabelle so gar nicht richtig drin. Das mit der Funktion ist bei mir damals gar ned gegangen aus Programmiertechnischen gründen. Die Lösung von der ich rede muss ich hier mal posten. Dann kannst du es machen wie ich dir oben beschrieben habe. Hier mal der Ansatz:

create view view\_geheim as  
select col1, col2…  
case when current\_user = “variable für benutzer hat rechte auf die Tabelle xyz” then col2 else null end, col3 from geheim;

So ähnlich. Ich poste es dir heut Abend noch.

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 17:50 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/9 "2008-02-07T17:50:31Z")

</div>

Okay alles klar. d.h. nur der benutzer, der in current\_user() abgefragt wird, hat die berechtigung…

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 17:52 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/10 "2008-02-07T17:52:10Z")

</div>

Noch eine Frage, wie kann ich zb. ein Feld überschreiben?

dachte so könnte es gehen, wird jedoch nicht akzeptiert:

```nohighlight
select *, field as 0
from table;

```

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 17:57 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/11 "2008-02-07T17:57:05Z")

</div>

Hier das genau Problem:

```nohighlight
create or replace view view_customers as
select *, cash as null
from customers;

```

Fehlermeldung:  
FEHLER: kann Anzahl der Spalten in Sicht nicht Ã¤ndern  
SQL state: 42P16

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [7. Februar 2008 um 18:25 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/12 "2008-02-07T18:25:41Z")

</div>

Hab es gelöst mit:

```nohighlight
field1,cast('0.0' as real) as my_field

```

---

<div class="post-metadata">

**Author:** ![anon56673172](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/dfb087/32.png) [@anon56673172](https://www.pg-forum.de/u/anon56673172)\
**Post date:** [7. Februar 2008 um 18:29 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/13 "2008-02-07T18:29:20Z")

</div>

Ok hier der Befehl zum Createn der View

```nohighlight
CREATE OR REPLACE VIEW person AS
SELECT persont.peid, persont.vorname, persont.nachname, persont.geschlecht,
CASE         
	WHEN has_table_privilege('persont', 'select') = true 
	THEN persont.jahrgang
	ELSE NULL
	END AS jahrgang,
CASE
	WHEN has_table_privilege('persont', 'select') = true 
	THEN persont.strasse       
	ELSE NULL    
	END AS strasse
FROM persont;

```

person ist die View  
persont ist die Tabelle

Die Rechtevergabe machst du auf die Tabelle, Die Abfragen auf die View. Der Rest macht SQL für dich. Wenn ein Feld vorher Strasse hies und nun als str angezeigt werden soll kannst du das im END AS Teil umsetzen. Statt “strasse” schreibst du hier “str” rein.

---

<div class="post-metadata">

**Author:** ![anon93456483](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/a/a3d4f5/32.png) [@anon93456483](https://www.pg-forum.de/u/anon93456483)\
**Post date:** [8. Februar 2008 um 00:44 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/14 "2008-02-08T00:44:25Z")

</div>

Hi, wirklich super. Besten Dank!!

---

<div class="post-metadata">

**Author:** ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)\
**Post date:** [21. Februar 2021 um 06:51 UTC](https://www.pg-forum.de/t/view-a-ber-eine-10gb-groaye-tabelle/2961/15 "2021-02-21T06:51:25Z")

</div>


