Wpis z mikrobloga

#programowanie #postgresql

ALTER TABLE production ALTER COLUMN production_symbol SET DEFAULT f_random_text(8);
Czy jeżeli mam kolumnę która ma defualt wartość wyznaczaną na podstawie funkcji frandomtext, to mogę dodać tutaj ifa? na zasadzie if COLUMN productionpriority = False SET DEFAULT frandomtext(8) a jeżeli true to trzeba podać z palca wartośc?
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@pulla: Nie za bardzo rozumiem ocb. Jak to podać wartość z palce? Chodzi Ci o to aby wartość DEFAULT była zależna od innej kolumny w tej samej tabeli (tak się nie da, chyba że w triggerze).
  • Odpowiedz
@m504: Tak aby wartość DEFAULT była zależna od innej kolumny. Dokładnie od kolumny typie boolean, która też defualtowo jest ustawiana na false i jak robie inserta to nie podaje symbolu i tej kolumny boolean bo robią sie defualtowo, a chciałbym jak zrobie insert i podam boolean jako true to wtedy nie zadziała funkcja frandomtext(8) tylko trzeba będzie wpisać ręcznie nazwę stringa.
  • Odpowiedz
@pulla: Nie ma na to prostego sposobu (przynajmniej nie znam). Nie można ustawić domyślnej wartości która jest zależna od innej kolumny.

Masz dwa sposoby:

1. Stwórz TRIGGER BEFORE INSERT i w funkcji triggera ustaw odpowiednią wartość.

2. Jawnie przekazać odpowiednie wartości przy wywoływaniu polecenia INSERT
  • Odpowiedz
@pulla: Jako że unikam jak ognia swojego aktualnego taska to Ci zrobiłem przykład użycia triggera (30 sek roboty).

CREATE OR REPLACE FUNCTION production_default_values_trigger()
RETURNS trigger AS
  • Odpowiedz
@m504: dzięki, ale dziwna sprawa. Jak chce dodać wartości do bazy to wywala mi błąd

ERROR: column "production_priority" does not exist

LINE 1: SELECT production_priority = FALSE

Sprawdziłem czy nie ma jakiejś literówki, ale nie znalazłem. Orientujesz się o co chodzi? Bo columna production_priority istnieje na 100%.
  • Odpowiedz