PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře



Podobné dokumenty
INDEXY JSOU GRUNT. Pavel Stěhule

zobrazení délky ve výpisu v psql

Verzování a publikace dat na webu za pomoci PostgreSQL

SQL injection princip a ochrana

TimescaleDB. Pavel Stěhule 2018

Rozšiřování a upravování stávající funkcionality PLToolbox, Orafce

PG 9.5 novinky ve vývoji aplikací

Databáze I. Přednáška 4

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Čteme EXPLAIN. CSPUG, Praha. Tomáš Vondra Czech and Slovak PostgreSQL Users Group

PostGIS Raster. Správa rastrových dat v geodatabázi PostGIS. Martin Landa. 155UZPD Úvod do zpracování prostorových dat, zimní semestr

Tabulka fotbalové ligy

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Databázové systémy Cvičení 5.2

Databáze I. Přednáška 7

Paralelní dotazy v PostgreSQL 9.6 (a 10.0)

Databázové systémy. Agregace, sumarizace, vnořené dotazy. Vilém Vychodil

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Optimalizace dotazů a databázové transakce v Oracle

PostgreSQL Novinky (a JSONB) Tomáš Vondra, GoodData (tomas.vondra@gooddata.com) (tomas@pgaddict.

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Implementace funkce XMLTABLE v PostgreSQL. Pavel

Semestrální práce z DAS2 a WWW

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Databázové systémy úvod

SQL injection jak ji možná neznáte Roman Kümmel

Michal Krátký, Miroslav Beneš

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Návrh a tvorba WWW stránek 1/14. PHP a databáze

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Object-relational mapping (JPA, Hibernate)

Databázové systémy I

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Databázové systémy a SQL

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy. Cvičení 6: SQL

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

PL/pgSQL. Pavel

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Úvod do databázových systémů

Kód v databázi. RNDr. Ondřej Zýka

Použití databází na Webu

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

MySQL sežere vaše data

Práce s datumem a časem v PostgreSQL. Pavel Stěhule P2D2 2019

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Milan Bořík, Vojtěch Honzík OPEN SOURCE GIS FUNKCE V PROSTŘEDÍ POSTGIS, TVORBA VLASTNÍCH FUNKCÍ A GRAFICKÝCH VÝSTUPŮ

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

SQL - trigger, Databázové modelování

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

PostgreSQL 9.1 efektivně

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Databázové systémy. Dotazovací jazyk SQL - III

Návrh a prototypová implementace databáze pro

Sada 1 - PHP. 14. Úvod do jazyka SQL

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

První pomoc pro DBA. administrátory CIDUG. Milan Rafaj IBM Česká republika

Databázové systémy a SQL

Databáze 2011/2012 T-SQL - kurzory, funkce. RNDr.David Hoksza, Ph.D.

Jazyk PL/SQL Úvod, blok

5. POČÍTAČOVÉ CVIČENÍ

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Databázové systémy. Přirozené spojení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 4) Přirozené spojení Databázové systémy 1 / 41

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Multi-dimensional expressions

Analýza a modelování dat 6. přednáška. Helena Palovská

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Vkládání, aktualizace, mazání

Optimalizace plnění a aktualizace velkých tabulek. Milan Rafaj, IBM

Databázové a informační systémy

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Temporální databáze. Jan Kolárik Miroslav Macík

6. SQL složitější dotazy, QBE

Virtual Private Database (VPD) Jaroslav Kotrč

PostgreSQL 8.3. požadavky na odezvu atd. Zatím nedostižnou metou je implementace celého standardu ANSI

NÁVRH A TVORBA HUDEBNÍ DATABÁZE

Operátory ROLLUP a CUBE

Databáze pro evidenci výrobků

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Databáze SQL SELECT. David Hoksza

PostGIS. Luboš Hejduk, Petr Sedlář 2007

Databázové systémy I

FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz>

Jak ušetřit místo a zároveň mít data snadno dostupná. David Turoň

Kapitola 4: SQL. Základní struktura

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

cstore_fdw column store pro PostgreSQL Prague PostgreSQL Developer Day 2015 Jan Holčapek

Administrace, Monitoring. Pavel Stěhule P2D2, Praha 2016

KIV/ZIS cvičení 5. Tomáš Potužák

IDS optimalizátor. Ing. Jan Musil, IBM ČR Community of Practice for

JAK KOMUNIKOVAT S DATABÁZÍ PostGIS TUTORIAL

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Databázové a informační systémy Jana Šarmanová

Transkript:

PostgreSQL Vzniká jako akademický projekt Experimentální vlastnosti Podpora dědičnosti Rozšiřitelnost vlastní datové typy Univerzální nasazení ve vědecké sféře Obsahuje podporu polí (časové řady) Geotypy bod, polygon Pavel Stěhule, http://www.pgsql.cz 1

TOAST Způsob uložení větších až velkých dat v PostgreSQL Limitem, který je třeba překonat je velikost datové stránky Zvětšením datové stránky Možností přesahu hranice datové stránky TOAST Pavel Stěhule, http://www.pgsql.cz 2

TOAST Pavel Stěhule, http://www.pgsql.cz 3

Pavel Stěhule, http://www.pgsql.cz 4

TOAST Originální data jsou komprimována a rozdělené do kousků Tyto kousky jsou uložené do tabulky pg_toast Místo vlastních dat je uložen ukazatel do tabulky pg_toast Toast se aktivuje, pokud záznam před toustováním je delší než 2KB Teoretický limit 1GB, praktický 10-20MB (záleží na velikosti operační paměti). Pavel Stěhule, http://www.pgsql.cz 5

Datové typy v SQL

Dědičnost tabulek postgres=# create table mesta(nazev varchar); CREATE TABLE postgres=# create table mesta_cs (nazev varchar) inherits (mesta); CREATE TABLE postgres=# create table mesta_en (nazev varchar) inherits (mesta); CREATE TABLE postgres=# insert into mesta_en values('londyn'); INSERT 0 1 postgres=# insert into mesta_cs values('praha'); INSERT 0 1 postgres=# select * from mesta_cs; nazev ------- Praha (1 row) postgres=# select * from mesta; nazev -------- Praha Londyn (2 rows) Pavel Stěhule, http://www.pgsql.cz 7

Domény - definice postgres=# create domain cistr as varchar; CREATE DOMAIN postgres=# select cistr 'fooo'; cistr ------- fooo (1 row) postgres=# select cistr 'Fooo'; cistr ------- Fooo (1 row) Pavel Stěhule, http://www.pgsql.cz 8

Domény vlastní funkce create function cistreq(cistr, cistr) returns boolean as $$ select lower(trim($1)) = lower(trim($2)); $$ language sql immutable strict; postgres=# select cistreq('a', ' A'); cistreq --------- t (1 row) postgres=# select cistreq('a', ' A'::cistr); cistreq --------- t (1 row) Pavel Stěhule, http://www.pgsql.cz 9

Domény vlastní operátory postgres=# create operator = ( procedure = cistreq, leftarg = cistr, rightarg = cistr); CREATE OPERATOR postgres=# select cistr 'Ahoj' = 'AHOJ';?column? ---------- t (1 row) Pavel Stěhule, http://www.pgsql.cz 10

Domény - test postgres=# create table test(c cistr); CREATE TABLE postgres=# insert into test values(' ahoj '), ('Ahoj'), ('AHOJ'); INSERT 0 3 postgres=# select * from test; c -------- ahoj Ahoj AHOJ (3 rows) Pavel Stěhule, http://www.pgsql.cz 11

Domény - test postgres=# select * from test where c = 'ahoj'; c -------- ahoj Ahoj AHOJ (3 rows) postgres=# select * from test where c::varchar = 'ahoj'; c --- (0 rows) Pavel Stěhule, http://www.pgsql.cz 12

Domény - test postgres=# create index fxidx on test(lower(trim(c))); CREATE INDEX postgres=# explain select * from test where c = 'ahoj'; QUERY PLAN ------------------------------------------------------------------------------------------- Index Scan using fxidx on test (cost=0.01..8.28 rows=1 width=32) Index Cond: (lower(btrim((c)::text)) = lower(btrim(('ahoj'::character varying)::text))) (2 rows) Pavel Stěhule, http://www.pgsql.cz 13

Domény - zhodnocení Vhodné pro základní návrh vlastních typů Nevhodné pro implementaci složitějších typů Chybí vstupní/výstupní funkce Přetypování vychází z bázických typů (nebere v potaz domény) Pavel Stěhule, http://www.pgsql.cz 14

Vlastní binární typy Mezi vlastními binárními typy a vestavěnými je jediný rozdíl umístění knihovny vše ostatní je stejné. Výkonostně, chováním se vlastní binární typy neliší od vestavěných. Pavel Stěhule, http://www.pgsql.cz 15

Vsuvka datové typy PostgreSQL Fixní cokoliv s pevnou délkou do 8byte Int, time, date, timestamp, interval, double Variabilní tzv. varlena Všechno ostatní text, varchar, numeric, bytea Kratké do 255 byte (délka je v 1byte) Dlouhé ostatní (délka je ve 4 byte) Připomíná string TurboPascalu prvních n byte nese délku rozdíl není to efektivní délka, nýbrž celková délka Pavel Stěhule, http://www.pgsql.cz 16

Typ Datum Interní datový typ používaný v PostgreSQL pro přenos paramtrů SQL funkcí Union 8byte hodnoty fixního typu 8byte pointer na typ varlena Pavel Stěhule, http://www.pgsql.cz 17

Vstupně/výstupní funkce Datum cistrin(pg_function_args) { Datum str = textin(fcinfo); return DirectFunctionCall1(lower, DirectFunctionCall1(btrim1, str)); } Datum cistrout(pg_function_args) { return textout(fcinfo); } Pavel Stěhule, http://www.pgsql.cz 18

Registrace funkcí pro SQL CREATE TYPE cistr; CREATE OR REPLACE FUNCTION cistrin(cstring) RETURNS cistr AS '$libdir/cistr' LANGUAGE C IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION cistrout(cistr) RETURNS cstring AS '$libdir/cistr' LANGUAGE C IMMUTABLE STRICT; Pavel Stěhule, http://www.pgsql.cz 19

Registrace typu CREATE TYPE cistr ( INPUT = cistrin, OUTPUT = cistrout, INTERNALLENGTH = VARIABLE, STORAGE = extended, CATEGORY = 'S', PREFERRED = false ); Pavel Stěhule, http://www.pgsql.cz 20

Test typu cistr postgres=# select '>>>' ' AHoj '::cistr '<<<';?column? ------------ >>>ahoj<<< (1 row) Pavel Stěhule, http://www.pgsql.cz 21

Registrace operátoru CREATE OPERATOR = ( LEFTARG = cistr, RIGHTARG = cistr, COMMUTATOR = =, NEGATOR = <>, PROCEDURE = cistreq, RESTRICT = eqsel, JOIN = eqjoinsel, HASHES, MERGES ); Pavel Stěhule, http://www.pgsql.cz 22

Test porovnání postgres=# select ' Ahoj '::cistr = 'ahoj';?column? ---------- t (1 row) Pavel Stěhule, http://www.pgsql.cz 23

Závěrečný test postgres=# create table test(c cistr); CREATE TABLE postgres=# insert into test values(' ahoj '), ('Ahoj'), ('AHOJ'); INSERT 0 3 postgres=# select * from test; c ------ ahoj ahoj ahoj (3 rows) Pavel Stěhule, http://www.pgsql.cz 24

Závěrečný test postgres=# select count(*) from test where c = ' Ahoj '; count ------- 3 (1 row) postgres=# select count(*) from test where c = 'AHOJ'; count ------- 3 (1 row) Pavel Stěhule, http://www.pgsql.cz 25

Složené typy postgres=# create type p as (x int, y int); CREATE TYPE postgres=# create table ptab(bod p); CREATE TABLE postgres=# insert into ptab values((10,20)); INSERT 0 1 postgres=# select * from ptab; bod --------- (10,20) (1 row) Pavel Stěhule, http://www.pgsql.cz 26

Složené typy postgres=# select (bod).x, (bod).y from ptab; x y ----+---- 10 20 (1 row) postgres=# select (bod).* from ptab; x y ----+---- 10 20 (1 row) Pavel Stěhule, http://www.pgsql.cz 27

WKT a WKB formát Umožňuje zadání libovolných prostorových dat POINT(-126.4 45.32), MULTIPOINT((0 0), (0 1)) Data WKT jsou uložena v textovém formátu Pokud databáze podporuje typ BYTEA mohou být transformovány do WKB formátu PostGIS provádí automaticky serializaci do WKB formátu

Vztah OpenGISu, PostGISu a SQL/MM