Konfigurační soubory v PostgreSQL a jejich umístění

Konfigurační soubory a jejich umístění lze jednoduše získat dotazem do pohledu (view) pg_settings.

SELECT name, setting FROM pg_settings WHERE category = 'File Locations';

Ve Windows můžete dostat tento výsledek

name              settings
config_file       C:/Program Files/PostgreSQL/9.4/data/postgresql.conf"
data_directory    C:/Program Files/PostgreSQL/9.4/data"
external_pid_file
hba_file          C:/Program Files/PostgreSQL/9.4/data/pg_hba.conf"
ident_file        C:/Program Files/PostgreSQL/9.4/data/pg_ident.conf"

Na Linuxovém serveru tato umístění

       name        |                 setting
-------------------+------------------------------------------
 config_file       | /etc/postgresql/9.4/main/postgresql.conf
 data_directory    | /var/lib/postgresql/9.4/main
 external_pid_file | /var/run/postgresql/9.4-main.pid
 hba_file          | /etc/postgresql/9.4/main/pg_hba.conf
 ident_file        | /etc/postgresql/9.4/main/pg_ident.conf

Pro krátký popis jednotlivých souborů slouží sloupec short_desc

SELECT name, short_desc FROM pg_settings WHERE category = 'File Locations';
       name        |                    short_desc
-------------------+--------------------------------------------------
 config_file       | Sets the server's main configuration file.
 data_directory    | Sets the server's data directory.
 external_pid_file | Writes the postmaster PID to the specified file.
 hba_file          | Sets the server's "hba" configuration file.
 ident_file        | Sets the server's "ident" configuration file.

Volné místo na disku v Linuxu

Pro zjištění volného místa na disky slouží příkaz df -h (human readable)

Souborový systém Velikost Užito Volno Uži% Připojeno do
/dev/sda1            6,8G  6,3G  169M  98% /
none                 4,0K     0  4,0K   0% /sys/fs/cgroup
udev                 487M  4,0K  487M   1% /dev
tmpfs                100M  916K   99M   1% /run
none                 5,0M     0  5,0M   0% /run/lock
none                 497M     0  497M   0% /run/shm
none                 100M   20K  100M   1% /run/user
Sdílené              215G  189G   26G  89% /media/sf_Sdílené

Konfigurační soubor postgresql.conf

Umístění
Umístění tohoto konfiguračního souboru na vašem systému zjistíte dotazem do pohledu (view) pg_settings.

SELECT setting FROM pg_settings WHERE name = 'config_file';

Popis
Soubor postgresql.conf je čten při startu serveru. Některé změny v nastavení v tomto souboru vyžadují reload, nekteré restart serveru. To zda je potřeba reload nebo restart poznáte podle sloupce context. Hodnota user znamená, že stačí reload. Pokud je hodnota postmaster, je třeba pro změny provést restart.
Sloupec unit určuje měrnou jednotku pro sloupce setting (současná hodnoty), boot_val (výchozí hodnoty) a reset_val (nová hodnota). Pokud se hodnoty ve sloupcích setting, boot_val a reset_val liší, je potřeba reload nebo reset.

SELECT name, short_desc, context, unit, setting, boot_val, reset_val 
FROM pg_settings 
WHERE name IN ('max_connections', 'shared_buffers', 'effective_cache_size', 'work_mem', 'maintenance_work_mem');

         name         |                           short_desc                            |  context   | unit | setting | boot_val | reset_val
----------------------+-----------------------------------------------------------------+------------+------+---------+----------+-----------
 effective_cache_size | Sets the planner's assumption about the size of the disk cache. | user       | 8kB  | 524288  | 524288   | 524288
 maintenance_work_mem | Sets the maximum memory to be used for maintenance operations.  | user       | kB   | 65536   | 65536    | 65536
 max_connections      | Sets the maximum number of concurrent connections.              | postmaster |      | 100     | 100      | 100
 shared_buffers       | Sets the number of shared memory buffers used by the server.    | postmaster | 8kB  | 16384   | 1024     | 16384
 work_mem             | Sets the maximum memory to be used for query workspaces.        | user       | kB   | 4096    | 4096     | 4096

Číst dálKonfigurační soubor postgresql.conf

Velikost RAM v Linuxu

Informace o operační paměti se nacházejí v souboru /proc/meminfo.

less /proc/meminfo
MemTotal:        1017048 kB
MemFree:          338264 kB
MemAvailable:     628572 kB
Buffers:           81348 kB
...

K zobrazení informací o paměti ve zjednodušené a čitelné podobě slouží příkaz free s přepínačem -h (zobrazí výstup s příponami označující velikost: K – kilo, M – mega, G – giga, …)

             total       used       free     shared    buffers     cached
Mem:          993M       662M       330M       2,6M        79M       307M
-/+ buffers/cache:       275M       717M
Swap:         1,0G         0B       1,0G

Zdroj: cyberciti.biz/faq/ram-size-linux/

Porovnávání Optional

Při porovnávání Optional není nutné kontrolovat isPresent a volat hodnotu, ale jde rovnou porovnánat objekty.

Optional<Long> emptyLong = Optional.empty();
Optional<Long> l1 = Optional.of(1L);
Optional<String> s1 = Optional.of("abc");

System.out.println(emptyLong.equals(l1));
System.out.println(emptyLong.equals(Optional.empty()));
System.out.println(l1.equals(s1));
System.out.println(s1.equals(Optional.of("abc")));

Výsledek

false
true
false
true

Stejné to je v testech (např. při použití testNG):

assertNotEquals(emptyLong, l1);
assertEquals(emptyLong, Optional.empty());
assertNotEquals(l1, s1);
assertEquals(s1, Optional.of("abc"));

Takto asserty projdou. Pokud bychom to změnili např. na assertEquals(emptyLong, l1), dostali bychom následující chybu:

Exception in thread "main" java.lang.AssertionError: expected [Optional[1]] but found [Optional.empty]
	at org.testng.Assert.fail(Assert.java:93)
	at org.testng.Assert.failNotEquals(Assert.java:512)
	at org.testng.Assert.assertEqualsImpl(Assert.java:134)
	at org.testng.Assert.assertEquals(Assert.java:115)
	at org.testng.Assert.assertEquals(Assert.java:178)
	at ...

Maven a scope test

Maven má rozsahy (scope), kterými je možno ovlivnit, která závislosti se bude používat v které fázi maven buildu. Rozsah test znamená, že dané závislosti (knihovny) budou k dispozici během testovací fáze, ale jinak ne.
Jednoduchý příklad ukážu na knihovně TestNG, která se používá pro testování. Závislost v pom.xml vypadá následovně:

<dependency>
	<groupId>org.testng</groupId>
	<artifactId>testng</artifactId>
	<version>6.11</version>
	<scope>test</scope>
</dependency>

Pokud budeme mít třídu AppTest v balíčku src/test/java a v ní tento test, který používá knihovnu TestNG:

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;

import org.testng.annotations.Test;

public class AppTest {
	@Test
	public void test() {
		assertNotEquals("A", "B");
		assertEquals(10, 10);
	}
}

při spuštění buildu aplikace pomocí mavenu (mvn test, z Eclipse IDE Run As -> Maven test) proběhne vše v pořádku (knihovna TestNG je k dipozici, kód se zkompiluje a proběhne).

Číst dálMaven a scope test

Modifikace sysdate v Oracle SQL

Oracle funkce sysdate vrací aktuální datum a čas databáze. Používá například při zjišťování, zda daný záznam je platný či ne.

SELECT * FROM tabulka WHERE datum < sysdate

Často ale potřebujeme zjistit záznam, který je např. starší než aktuální datum plus/mínus X dní/hodin/minut/… Pokud napíšeme:

SELECT SYSDATE, SYSDATE - 60 FROM dual;

bude výsledek následující:

SYSDATE                SYSDATE-60
12.07.17 11:22:36      13.05.17 11:22:36

To je docela nepřehledné, protože ne každý může vědět, že se odečítají dny. Mnohem lepší je:

SELECT SYSDATE, SYSDATE - INTERVAL '60' DAY AS sysdate_minus_60_days FROM dual;

který vrací stejný výsledek, ale je mnohem jasnější, jaká časová hodnota se modifikuje (INTERVAL ’60‘ DAY):

SYSDATE                SYSDATE_MINUS_60_DAYS
12.07.17 11:25:00      13.05.17 11:25:00

Je samozřejmě možné přidávat a odebírat nejen dny, ale i jiné časové úseky (second, minute, hour, day, month, year).

SELECT SYSDATE, SYSDATE + INTERVAL '5' MINUTE AS sysdate_plus_5_minutess FROM dual;

Výsledek

SYSDATE                SYSDATE_PLUS_5_MINUTES
12.07.17 11:26:34      12.07.17 11:31:34