PostgreSQL: Jak uzyskać wartość ID wygenerowaną przez typ SERIAL i użyć jej w kolejnym zapytaniu?

2022-11-05

SERIAL generuje kolejne wartości, zazwyczaj używane jako identyfikator w tabelach. Np. tutaj kolumna id ma automatycznie nadawaną wartość:

a tutaj id trzeba podawać samodzielnie:

Co zrobić, jeśli chcielibyśmy w zapytaniu SQL wykorzystać wartość, która została wygenerowana w kolejnym zapytaniu? Oto propozycja nr 1

Polecenie INSERT wstawia nowy rekord. Podczas tego wstawiania generowana jest nowa wartość id. Ta wartość jest zwracana przez klauzulę RETURNING. Żeby z tej wartości dalej skorzystać budujemy wyrażeni CTE (Common Table Expression), które wartości zwracane przez INSERT z RETURNING udostępnia w wirtualnej tablicy r. Idąc dalej można wykonać zapytanie do tabeli r, a wynik np. wykorzystać do wstawienia go do kolejnej tabeli t2:

A oto propozycja nr 2.

Polecenie insert generuje nową wartość w oparciu o sekwencję (tak właśnie działa typ SERIAL). Możemy wiec w kolejnym zapytaniu pobrać wartość z tej sekwencji poleceniem currval. Co istotne zadziała to nawet wtedy, jeśli w międzyczasie w innej sesji ktoś też wstawił rekord do tabeli t1 i wygenerował nową wartość:

 

By Rafał Kraik in PostgreSQL

PostgreSQL: PGAdmin: Restore: Utility not found – jak naprawić ten błąd?

2022-11-03

W PG Admin, po wybraniu  polecenia „Restore database” pojawia się czasami komunikat o błędzie „Utility not found”

Co wtedy zrobić?

Należy w menu PGAdmin wybrać polecenie File >> Preferences

Dalej poszukaj w drzewku po lewej stronie odszukaj Paths >> Binary Paths

Teraz po prawej stronie okna, w dolnej części zatytyłowanej „PostgreSQL Binary Path” odszukaj numeru wersji, którą masz na swoim komputerze. (Uwaga – nie pomyl się. Jest tam też podobna tabelka zatytułowana „EDB Advanced Server Binary Path” – ale ta nas nie interesuje.

Teraz kliknij ikonę folderka i wskaż na katalog bin, w którym masz zainstalowany PostgreSQL. Najprawdopodobniej będzie to coś w tym stylu (uważaj zwłaszcza na numer wersji):

C:\Program Files\PostgreSQL\15\bin

Po wybraniu foldera, powyższy ekran powinien wyglądać tak:

Teraz zapisz zmiany „Save” i problem powinien być rozwiązany 🙂

A o co chodziło w tych krokach? W katalogu, który wskazaliśmy znajdują się programy narzędziowe PostgreSQL. Jeden z nich to program pg_restore, który służy do odtwarzania bazy danych. Z jakiegoś powodu ten parametr nie ustawia się automatycznie i wtedy… trzeba trochę pomóc. Teraz już wiesz co, jak i dlaczego 🙂

By Rafał Kraik in PostgreSQL

Python: Formatowanie napisów

2022-11-03

Od czasu do czasu dostaję pytanie o to, jak formatować napisy w Pythonie. Lubię w takim przypadku odsyłać do dokumentacji Pythona, dlatego, ku pamięci…

https://peps.python.org/pep-3101/

https://docs.python.org/3/library/string.html

i nieco mniej oficjalny, ale super fajny:

https://realpython.com/python-formatted-output/

By Rafał Kraik in Python

Python: %Mathplotlib inline

2022-10-30

W wielu tutorialach, można spotkać instrukcję:

%mathplotlib inline

Co ona oznacza? Jakie inne opcje oprócz inline są możliwe do uruchomienia?

Odpowiedź w skrócie: rysując wykres, możesz go uzyskać w dodatkowym okienku, które otworzy się, kiedy ten wykres pokazujesz, ale można też umieścić wykres bezpośrednio w Notebooku. Opcje domyślne się zmieniają – w starszych notebookach wykresy domyślnie generowały sie w ekstra oknie, a w nowszych są wbudowywane w notebook.

Jeśli chcesz się pobawić i zobaczyć, jak inaczej można by generować wykresy uruchom:

U mnie pokazuje się:

I sorry za brak kompentencji hahah, ale nie znam znaczenia wszystkich tych opcji 🙂 Część z nich u mnie w ogóle nie działa 🙂

Ale wykonałem takie oto próby, które powinny pomóc w zrozumieniu, jak z tym pracować. Co bardzo ważne – kernel notebooka należy przed uruchomieniem tego kodu zrestartować, tak, aby ten kod uruchomił się jako pierwszy. Ten kod otworzy nowe okno:

Po restarcie i zmianie kodu na:

Wykres jest umieszczany poniżej komórki, w której kod został uruchomiony.

No i bardzo ważne – zależnie od narzędzia jakiego używasz (Spyder, Jupyter, VSC, …) coś może zadziałać, albo nie, bo komendy rozpoczynające się od % działają nisko na poziomie modułu, który modyfikują.

Jeśli jesteś zainteresowany szczegółami poczytaj tu: https://www.scaler.com/topics/matplotlib-inline/

By Rafał Kraik in Python

Visual Studio Code: Python: Automatyczne uruchomienie środowiska wirtualnego venv

2022-10-26

Visual Studio Code pozwala na korzystanie ze środowisk wirtualnych tworzonych w Pythonie. Takie środowisko bywa czasami uparte i nie chce sie automatycznie uruchomić. Oto jak udało mi się skłonić VSC do automatycznego uruchamiania wybranego środowiska.

– otwórz nowy pusty folder (projekt)

– otwórz terminal i stwórz nowy environment

– dodaj do projektu plik z kodem pythonowym (wystarczy żeby miał w sobie cokolwiek, np. print(‚hello’))

– naciśnij Ctrl+Shift+P i wyszukaj w palecie polecenia „Select Python interpreter”

 

 

– wskaż na interpreter z utworzonego wcześniej environment (w podkatalogu myenv)

Teraz jeśli uruchomisz nowy terminal, to ten terminal automatycznie aktywuje środowisko myenv (uruchamiając terminal miej już otwarty plik .py)

Jeśli uruchomisz skrypt, VSC też aktywuje to środowisko.

By Rafał Kraik in Python

Helpdesk: Ręczna modyfiacja menu w Windows 10, 11 etc

2022-10-25

Bywa, że chcesz, żeby w menu Windows pojawiła się nowa pozycja, której program instalacyjny sam z siebie nie zainstalował. W końcu menu, to tylko zbiór skrótów do programów, wydaje się więc, że powinno być możliwe dodanie tam czegokolwiek. I rzeczywiście!

Menu można modyfikować globalnie dla wszystkich użytkowników komputera poprzez modyfikacje w

Jeśli masz problem ze znalezieniem tego miejsca, albo w następnych wersjach Microsoft miałby je umieścić gdzie indziej, to można sprawdzić lokalizację menu z PowerShella:

a korzystając z komendy:

można ten folder od razu otworzyć w windows explorer!

Menu dla użytkownika znajduje się w katalogu:

Ścieżka do tego katalogu może być zwrócona przez polecenie PowerShell:

a folder otworzysz w Windows Explorer korzystając z:

Teraz pozostaje tylko umieszczać w tych katalogach podkatalogi, skróty do programów, a menu Windows będzie te zmiany prezentować.

By Rafał Kraik in Helpdesk

Helpdesk: TSM TDP – odtwarzanie bazy danych master

2022-10-25

IBM Tivoli Data Protection to jedeno z rozwiązań ciągle używanych do wykonywania kopii zapasowej baz danych SQL. Narzędzie ma swoje wady i zalety, ale robi to co ma robić i chwała mu za to.

Dokumentacja produktu jest stworzona w dość typowy dla IBM pokrętny sposób. Niby wszystko tam jest, ale znalezienie sensownej informacji – to już jest najwyraźniej „out-of-scope” największej korporacji.

Tym razem zmierzyłem się z odtwarzaniem bazy danych master na serwerze SQL. Jak należało się spodziewać, wszelkie udogodnienia stworzone dla administratora w tym momencie przestają działać: przystawka mmc dedykowana dla Tivoli, owszem łączy sie do systemu backupowego i do serwera, ale po uruchomieniu odtworzenia operacja kończy się błędem.

Przystawka wykorzystuje „pod spodem” komendy powershella, które szczęśliwie wyświetla użytkownikowi, dzięki temu można przyjrzeć się parametrom, jakie udało się wyklikać w GUI. Jeśli jednak ktoś liczy na to, że uruchomienie powershella i owej komendy załatwi sprawę podczas odtwarzania, to się myli.

Podczas odtwarzania bazy danych, serwer SQL pracuje w trybie Single User Mode. Oznacza to, że jest możliwe TYLKO jedno aktywne połącznie. Polecenie Powershellowe najwyraźniej otwiera sobie tych połączeń więcej, więc samo się blokuje. Czemu tak to zostało zrobione? Bo IBM miał taki kaprys 🙂

Ale jest metoda! Należy skopiować polecenie powershell i przejrzeć jego argumenty. Następnie te argumenty należy przełożyć na argumenty polecenia tdpsqlc.exe. Kończymy uruchamiając polecenie tdpsqlc.exe z tak skonstruowanymi parametrami, np.:

Polecenie Powershell:

zamieni się na:

Podsumowując, do poprawnego odtworzenia bazy danych master można:
0. Jeśli trzeba – odbudować uszkodzoną bazę master
1. Wyklikać operację odtworzenia bazy danych master, ale nie uruchamiać, tylko skopiować polecenie powershell i przerobić je na wersję tdpsqlc.exe
2. Uruchomić SQL Server w trybie single user (przełącznik -m dla programu sqlsrv.exe uruchamianego z katalogu binn w instancji)
3. Uruchomić przygotowane polecenie tdpsqlc.exe

Linki do dokumentacji IBM:
https://www.ibm.com/docs/en/tsmfd/7.1.1?topic=files-restoring-master-database
https://www.ibm.com/support/pages/apar/IC97413

Any one using Tivoli, TDP from IBM????


https://www.ibm.com/docs/en/tsmfd/7.1.3?topic=command-restore-syntax

By Rafał Kraik in SQL