Postgres – tabele

Tworzenie tabeli

CREATE TABLE users (
    id              serial  primary key,
    name            varchar(80),
    age             int,           -- how many years
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);
-- <komentarz>

DESC users – struktura tabeli users

\d+ users

Typy

int, smallint, real, double precision, char(N), varchar(N), date, time, timestamp, interval

Wstawianie danych – kopiowanie z pliku do tabeli

COPY users FROM '/home/joe/users.txt';

Postgres – komendy

Poziom klienta – terminala psql

\l[+]      - lista baz danych


\dt[+]      - lista tabel
\dp         - tabele, widoki, uprawnienia

\du     - użytkownicy / role

DESC users – struktura tabeli users

\d+ users
\dT[+]      - schema
\dO[+]      - collations
help \?
\q      - WYJŚCIE
exit
select version();

PostgreSQL 13.20 (Debian 13.20-0+deb11u1) on x86_64-pc-linux-gnu, compiled by gcc

Export z tabeli do pliku CSV

SELECT "Nazwa Firmy", "Płeć", "Imię", "Nazwisko", "Stanowisko", "Tel", "Email", "Komórka"

UNION

SELECT
  c.name,
  CASE cc.is_man WHEN 2 THEN "K" WHEN 1 THEN 'M' ELSE '-' END,
  cc.firstname, cc.lastname,
  IFNULL(cc.stanowisko, "-"), IFNULL(cc.tel, "-"), IFNULL(cc.email,"-"), IFNULL(cc.kom,"-")
FROM company_contacts cc
 INNER JOIN companies c ON c.id = cc.company_id
ORDER BY cc.company_id, cc.lastname, cc.firstname
LIMIT 20

INTO  OUTFILE '/tmp/company_contacts.csv'
      CHARACTER SET CP1250
      FIELDS ENCLOSED BY ""
      TERMINATED BY ';'
      ESCAPED BY '\\'
      LINES TERMINATED BY '\n'
;

miniConda – installacaj i konfiguracja

https://repo.anaconda.com/miniconda/  – repozytorium pakietów miniconda

Miniconda3-latest-Windows-x86_64.exe

Anaconda Prompt

> conda list

Konfiguracja:

// Tworzy nowe środowisko od_zera_do_ai

> conda create --name <od_zera_do_ai> python=3.11
// aktywuje środowisko od_zera_do_ai

> conda activate <od_zera_do_ai>
// sprawdzamy jakie mamy środowiska i które jest aktywne (*)

> conda env list 
// Instalujemy aplikację jupyterlab i pakiety 

> conda install jupyterlab 

> conda install matplotlib 

> conda install seaborn 

> conda install plotly 
// pakiet date-a-scientist nie jest obsługiwany przez miniconda, 
// instalujemy z poziomu pythona

> pip install date-a-scientist

Przejście do katalogu roboczego projektu:

> cd C:\Users\john\Desktop\od_zera_do_ai
// Uruchamia aplikację webową jupyter lab

> jupyter lab


Odpali:  https://localhost:8888/lab

Debouncing – opóźnienie wykonania funkcji

Przy wpisywaniu nazwy podczas wyszukiwania – opóźniamy wysłanie zapytania do momentu zakończenia wprowadzania tekstu – zwykle 400ms.

Definicja funkcji debounce w pliku – /js/common.js

const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))

function debounce(func, timeout = 400){
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => { func.apply(this, args); }, timeout);
  };
}

Użycie debounce w kodzie js

// Zmieniono domyślne opóźnienie 400 na 500ms
const debounceName = debounce((str) => liveSearchCompanyByName(str), 500);

$("#fullname").on('keyup', function(){
  var name_str = $(this).val().trim();
  var name_len  = name_str.length;
  if( name_len >= 3 ) {
    debounceName(name_str);
  } else{
    clearNameResults();
  }
});

Obsługa wyszukiwania / filtrowania (url.searchParams)

// Uruchomienie debouncera z timeoutem 600ms
// Jeśli jest fraza ustaw searchParam, jeśli nie usuń
const debounceNumber = debounce( (s_number) => {
  if(s_number) {
    url.searchParams.delete('page');
    url.searchParams.set('s_number', s_number);
  } else {
    url.searchParams.delete('s_number');
  }
  location.href = url.toString();
}, 600);

// wpisywanie w pole wyszukiwania (s_number)
$("#s_number").on('keyup', function(){ debounceNumber( $(this).val() ); });