1.) Gdy potrzebujesz dołączyć uwagi do zapytania, możesz użyć zagnieżdżonego komentarza
SELECT
a, b, c
FROM mytab;
2.) Usuń końcowe spacje ze wszystkich pól text
i varchar
w bazie danych.
do $$
declare
selectrow record;
begin
for selectrow in
select
'UPDATE '||c.table_name||' SET '||c.COLUMN_NAME||'=TRIM('||c.COLUMN_NAME||') WHERE '||c.COLUMN_NAME||' ILIKE ''% '' ' as script
from (
select
table_name,COLUMN_NAME
from
INFORMATION_SCHEMA.COLUMNS
where
table_name LIKE 'tbl%' and (data_type='text' or data_type='character varying' )
) c
loop
execute selectrow.script;
end loop;
end;
$$;
3.) Możemy użyć funkcji okna do bardzo skutecznego usuwania zduplikowanych wierszy:
DELETE FROM tab
WHERE id IN (SELECT id
FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), id
FROM tab) x
WHERE x.row_number > 1);
Niektóre zoptymalizowane wersje PostgreSQL (z ctid):
DELETE FROM tab
WHERE ctid = ANY(ARRAY(SELECT ctid
FROM (SELECT row_number() OVER (PARTITION BY column_with_duplicate_values), ctid
FROM tab) x
WHERE x.row_number > 1));
4.) Gdy potrzebujemy zidentyfikować stan serwera, możemy skorzystać z funkcji:
SELECT pg_is_in_recovery();
5.) Pobierz polecenie DDL funkcji.
select pg_get_functiondef((select oid from pg_proc where proname = 'f1'));
6.) Bezpieczna zmiana typu danych kolumny w PostgreSQL
create table test(id varchar );
insert into test values('1');
insert into test values('11');
insert into test values('12');
select * from test
id
character varying
1
11
12
Z powyższej tabeli widać, że użyłem typu danych - „zmienny znak” w
kolumnie „identyfikator” . Ale to był błąd, ponieważ jako id zawsze podaję liczby całkowite. Więc używanie varchar tutaj jest złą praktyką. Spróbujmy więc zmienić typ kolumny na liczbę całkowitą.
ALTER TABLE test ALTER COLUMN id TYPE integer;
Ale wraca:
BŁĄD: nie można automatycznie rzutować kolumny „id” na typ całkowity stan SQL: 42804 Wskazówka: Określ wyrażenie USING, aby wykonać konwersję
Oznacza to, że nie możemy po prostu zmienić typu danych, ponieważ dane są już w kolumnie. Ponieważ dane są typu „zmienne znakowo”, postgres nie może oczekiwać, że będzie to liczba całkowita, chociaż wprowadziliśmy tylko liczby całkowite. Więc teraz, jak zasugerował postgres, możemy użyć wyrażenia „USING” do rzutowania naszych danych na liczby całkowite.
ALTER TABLE test ALTER COLUMN id TYPE integer USING (id ::integer);
To działa.
7.) Dowiedz się, kto jest podłączony do bazy danych
Jest to mniej więcej polecenie monitorujące. Aby dowiedzieć się, który użytkownik połączył się z którą bazą danych, w tym jego adresem IP i portem, użyj następującego SQL:
SELECT datname,usename,client_addr,client_port FROM pg_stat_activity ;
8.) Ponowne ładowanie plików konfiguracyjnych PostgreSQL bez ponownego uruchamiania serwera
Parametry konfiguracyjne PostgreSQL znajdują się w specjalnych plikach, takich jak postgresql.conf i pg_hba.conf. Często może zajść potrzeba zmiany tych parametrów. Jednak aby niektóre parametry zaczęły obowiązywać, często musimy ponownie załadować plik konfiguracyjny. Oczywiście zrestartowanie serwera wystarczy. Jednak w środowisku produkcyjnym nie zaleca się ponownego uruchamiania bazy danych, która jest używana przez tysiące, tylko w celu ustawienia niektórych parametrów. W takich sytuacjach możemy przeładować pliki konfiguracyjne bez restartowania serwera za pomocą funkcji:
select pg_reload_conf();
Pamiętaj, że to nie zadziała dla wszystkich parametrów, niektóre zmiany parametrów wymagają pełnego restartu serwera, aby odniosły skutek.
9.) Pobieranie ścieżki katalogu danych bieżącego klastra bazy danych
Jest możliwe, że w systemie skonfigurowanych jest wiele instancji (klastrów) PostgreSQL, ogólnie w różnych portach. W takich przypadkach znalezienie katalogu (fizycznego katalogu pamięci) używanego przez którą instancję jest gorączkowym zadaniem. W takich przypadkach możemy użyć następującego polecenia w dowolnej bazie danych w interesującym nas klastrze, aby uzyskać ścieżkę do katalogu:
SHOW data_directory;
Tej samej funkcji można użyć do zmiany katalogu danych klastra, ale wymaga to ponownego uruchomienia serwera:
SET data_directory to new_directory_path;
10.) Znajdź CHAR to DATA, czy nie
create or replace function is_date(s varchar) returns boolean as $$
begin
perform s::date;
return true;
exception when others then
return false;
end;
$$ language plpgsql;
Użycie: poniższe zwróci wartość True
select is_date('12-12-2014')
select is_date('12/12/2014')
select is_date('20141212')
select is_date('2014.12.12')
select is_date('2014,12,12')
11.) Zmień właściciela w PostgreSQL
REASSIGN OWNED BY sa TO postgres;
12.) DEBUGGER PGADMIN PLPGSQL
Dobrze wyjaśniono tutaj