Kolejna ciekawostka #postgreSQL
zapytania postaci
WITH x(dzien) AS
(
SELECT '2019-01-01'
UNION
SELECT '2019-02-01'
UNION
SELECT '2019-03-01'
UNION
SELECT '2019-04-01'
UNION
SELECT '2019-05-01'
UNION
SELECT '2019-06-01'
UNION
SELECT '2019-07-01'
)
SELECT * FROM x
oraz
WITH y(dzien) AS
(
VALUES('2019-01-01'),('2019-02-01'),('2019-03-01'),('2019-04-01'),('2019-05-01'),('2019-06-01'),('2019-07-01')
)
SELECT * FROM y
Są takie same. Znaczy wyniki są takie same. Jednak ich działania i tworzenie jest inne.
W każdym z tych zapytań zwracana jest jedna kolumna typu TEXT (postgreSQL 9,6). A co, gdybym chciał DATE? Trzeba castować element(y). Ale które? Można wszystkie, i wtedy będzie najlepiej - w końcu UNION wymaga, aby każdy element danej kolumny był tego samego typu.
Można też pierwszy. I uwaga: można i drugi. I uwaga: NIE MOŻNA trzeciego.
Nie można żadnego innego niż 1 lub 2. Ale tylko w przypadku UNION. Zapytanie z VALUES zadziała z castowaniem w dowolnym elemencie - cała kolumna będzie tego typu
WITH y(dzien) AS
(
VALUES('2019-01-01'),('2019-02-01'),('2019-03-01'),('2019-04-01'),('2019-05-01'::DATE),('2019-06-01'),('2019-07-01')
)
SELECT * FROM y
zwróci jedną kolumnę typu DATE.
Zapytanie:
WITH x(dzien) AS
(
SELECT '2019-01-01'
UNION
SELECT '2019-02-01'
UNION
SELECT '2019-03-01'
UNION
SELECT '2019-04-01'
UNION
SELECT '2019-05-01'::DATE
UNION
SELECT '2019-06-01'
UNION
SELECT '2019-07-01'
)
SELECT * FROM x
Zwróci błąd
BŁĄD: UNION typy text i date nie mogą być dopasowane
LINE 11: SELECT '2019-05-01'::DATE
^
********** Błąd **********
BŁĄD: UNION typy text i date nie mogą być dopasowane
Stan SQL: 42804
Znak: 152
EDIT:
W Arrayu również można podać typ w dowolnym momencie:
select * from unnest(array['2019-01-01', '2019-02-02', '2019-03-01', '2019-04-01', '2019-05-01'::date, '2019-06-01', '2019-07-01'])
Dziś takie cudeńko w bazie znalazłem (sam je zresztą swego czasu napisałem...)
CREATE OR REPLACE FUNCTION xxx(IN text) RETURNS TABLE(wartosc text) AS
$BODY$
with"t"as(select($1)"w"),"r"as(select"regexp_matches"(w,E'i:(\\d+);.:(\\d+);','g')"r"from"t")select(r::text[])[2]from"r"
$BODY$
LANGUAGE sql VOLATILE
wewnątrz SQL nie ma spacji :)
#postgreSQL
@WeiXiao: funkcja ma zwracać dla zserializowanej w PHP tablicy intów wartości elementów tablicy. Czy dla np.`a:4:{i:0;i:21;i:1;i:33;i:2;i:45;i:3;i:123}' zwróci 4 rekordy: 21, 33,45 i 123
Czołem! Jak co piątek podrzucam Prasówkę Technologiczną. Niezmiennie sporo wartościowej i konkretnej wiedzy z różnych dziedzin. ⤵⤵
Pamiętacie HAL 9000 z filmu “A Space Odyssey”? Superkomputer z tendencją do mordowania astronautów? Naukowcy stworzyli #ai na jego podstawie
Link: https://www.iflscience.com/technology/scientists-have-created-ai-inspired-by-hal-9000-from-2001-a-space-odyssey/
Marzyłeś o tym by korzystać z komputera za pomocą swoich myśli? Nowy implant mózgu umożliwia sparaliżowanym pacjentom surfowanie po internecie właśnie w taki sposób!
Link: https://www.iflscience.com/technology/new-brain-implant-allows-paralyzed-patients-to-surf-the-internet-using-their-thoughts/
19 kursów, 15 tysięcy recenzji i ponad 100 tysięcy uczestników. To statystyki działalności Arka Włodarczyka, który od kilku lat tworzy kursy dot. programowania i zamieszcza je na platformie #udemy. Rozmawiamy z nim o tym, jak od środka wygląda rynek e-learningowy i jak znaleźć idealny dla siebie kurs.
Link: https://geek.justjoin.it/kazdy-swoj-typ-nauczyciela-arek-wlodarczyk-o-sprzedawaniu-kursow-udemy-com/
Tajne kody Netflix odblokowują tysiące ukrytych gatunków filmowych. Masz ochotę na dramaty wojskowe czy kino afrykańskie? - Żaden problem!
Link: https://www.iflscience.com/technology/secret-netflix-codes-unlock-thousands-of-hidden-movie-genres/
Ogromny sztuczny księżyc może rozświetlić niebiosa Chin już w 2020 roku. W jaki sposób chcą to zrobić? Info w artykule
Link: https://www.iflscience.com/technology/a-huge-artificial-moon-could-light-up-chinas-skies-as-soon-as-2020/
Wybór odpowiedniego narzędzia do testów funkcjonalnych jest jedną z kluczowych decyzji. Autor przedstawia i omawia 30 narzędzi do testowania funkcjonalnego, a także opowiada o wyzwaniach związanych z testowaniem manualnym.
Link: https://www.simform.com/functional-testing-tools/
#react Suspense z Fetch API. Autor ukazuje magię kryjąca się za kurtyną React Suspense i omawia w jaki sposób stworzył ten pakiet.
Link: https://medium.com/swlh/react-suspense-with-the-fetch-api-cc655aced759
Zamień bugi w klejnoty: debugowanie aplikacji #ruby. Kilka słów o narzędziach i technikach debugowania w Ruby autorstwa Roberta W. Olivera II.
Link: https://blog.sourcerer.io/turning-bugs-into-gems-debugging-ruby-applications-314ff869a611
#redux jest do bani z React-Native. - Ciekawy artykuł Flavio Caetano znajdziecie w linku:
Link: http://blog.flaviocaetano.com/post/redux-sucks-with-react-native/
— Co gdybyś wiedział więcej na temat swoich klientów pozyskując dane z wielu źródeł, takich jak media społecznościowe? — zachęca lektorka z filmu promującego bezpłatne kursy dot. machine learningu, udostępnione właśnie przez #amazon. Dotychczas kursy były dostępne dla pracowników firmy, od dziś możemy korzystać z nich za darmo. Amazon w przygotowanych materiałach przedstawia zastosowanie swoich usług takich jak Amazon Rekognition, Amazon Lex, Amazon Polly oraz AWS Lambda.
**Link:v https://geek.justjoin.it/amazon-udostepnil-57-darmowych-kursow-dot-machine-learningu/
Programowanie na telefonie z Androidem. Dowiedz się więcej o emulatorze terminalu Android autorstwa Fredrika Fornwall.
**Link: https://medium.com/@jumpcarefully/programming-on-an-android-phone-da2526f34255
Zdarzyło Ci się mieć problem z zalogowaniem do aplikacji bankowej na iPhone, bo klawiatura pojawiała się nad przyciskiem “logowanie”? - Marin Bencevic omawia typowe problemy z klawiaturą iOS i jak je naprawić.
Link: https://www.scaledrone.com/blog/fixing-common-issues-with-the-ios-keyboard/
Przesiadka z #ios na #android. Autor postanowił przeskoczyć z iPhone X na Google Pixel 2XL oraz z iPada Pro i MacBooka na #google Pixelbook. Dlaczego to zrobił i jakie są jego spostrzeżenia? O tym w artykule!
Link: http://www.speirs.org/blog/2018/11/18/on-switching-from-ios-to-android
Rozwój #ios nie stoi w dobrym miejscu. Zdaniem autora obejmuje to dokumentację, frameworki, języki, obsługę błędów, #xcode itd. - Dlaczego? Odpowiedź w linku:
Link: https://medium.com/@karti/ios-development-isnt-in-a-good-place-5fb73c31483e
Mieszanie kodu synchronicznego i asynchronicznego w #python to styl wykorzystywany w oprogramowaniu sterującym dużych teleskopów mikrofalowych. Niestety zmiany w Python 3.7 wniosły ze sobą kilka problemów. Autorzy wyjaśniają dlaczego asynchroniczny ekosystem Pythona jest dla nich tak ważny.
Link: http://threespeedlogic.com/python-tworoutines.html
Przestańcie nauczać #cplusplus! ...jako pierwszego języka programowania. Borislav Stanimirov wyjaśnia dlaczego C++ nie powinien być pierwszym językiem jakiego się uczysz.
Link: http://ibob.github.io/blog/2018/11/22/stop-teaching-cpp/
#postgres jest bazą danych, która od kilkunastu lat świetnie sobie radzi. Dlaczego jednak Postgres to coś więcej niż relacyjna baza danych?
Link: https://www.citusdata.com/blog/2018/11/27/postgres-more-than-a-relational-database/
Jeden z najprostszych i najpotężniejszych API css-in-js - Emotion 10! Co się zmieniło i jakie błędy zostały naprawione w wersji 10 napisał Mitchell Hamilton:
Link: https://medium.com/emotion-js/announcing-emotion-10-f1a4b17b8ccd
#graphql: Retrospekcja. Autorzy mając mało czasu na zbudowanie MVP zdecydowali się skorzystać z #graphql, z którym żaden nie miał wcześniej doświadczenia. - Czego się nauczyli i czy polecają wykorzystanie tej technologii w artykule:
Link: https://verve.co/engineering/graphql-a-retrospective/
#flutter vs #reactnative. Od momentu opublikowania, Flatter dołączył do listy technologii programowania wieloplatformowego, która zawiera już kilka popularnych rozwiązań w tym między innymi React Native. Jak wypada Flatter w porównaniu z tym drugim?
Link: https://diophant.com/blog/flutter-vs-react-native/
Co zawiera obraz #docker? Obrazy Dockera mogą wydawać się dość tajemnicze. - Autor nie tylko zdradza co zawierają, ale również pokazuje jak się tam dostać.
Link: https://cameronlonsdale.com/2018/11/26/whats-in-a-docker-image/
Czy #blockchain naprawdę się skończył? Kryptowaluty mogą być przedmiotem spekulacji, jednak technologia Blockchain i decentralizacja są bardziej stabilne. Autor wskazuje co najmniej 6 powodów, dla których Blockchain dopiero się zaczyna!
Link: https://www.nfx.com/post/is-blockchain-really-over
Amazon wchodzi w #blockchain z nową usługą - Amazon Quantum Ledger Database. To nie wszystko. Firma ogłosiła jeszcze jeden produkt na #aws re:Invent. Jaki? O tym w artykule:
Link: https://techcrunch.com/2018/11/28/amazon-gets-into-the-blockchain-with-quantum-ledger-database-managed-blockchain/?guccounter=1
Identyfikatory korelacji w #scala z użyciem Monix. W jaki sposób niezawodnie przekazywać identyfikator korelacji między granice wątków? Między innymi na to pytanie odpowiada Adam Warski w swoim artykule
Link: https://blog.softwaremill.com/correlation-ids-in-scala-using-monix-3aa11783db81
Rewolucja cyfrowa skutecznie zmienia krajobraz branży IT, rośnie też zainteresowanie metodykami #agile i #devops. Coraz częstsze wykorzystywanie Cloud Computing oraz ciągle rosnąca różnorodność i liczba urządzeń, oraz przeglądarek internetowych również wywierają wpływ na to, jak wygląda obecnie świat testowania oprogramowania, jednocześnie stawiając przed nim nowe wymagania na przyszłość. Jaki ma to wpływ na branżę testowania oprogramowania i jaka jest kondycja testerów na rynku pracy?
Link: https://geek.justjoin.it/sytuacja-testerow-rynku-it-rozwiazania-brakujacych-specjalistow/
#naukaprogramowania #programowanie #programista15k #technologia #informatyka
Był iloczyn kartezjański, to jeszcze taki przykład. (WSZYSTKIE moje przykłady, o ile nie zaznaczę inaczej są na #postgreSQL)
SELECT * FROM unnest(array[1,2]) x
Zwraca dwa rekordy - zamienia tablicę na poszczególne rekordy. Czyli analogicznie:
SELECT * FROM unnest(array[1,2]) x, unnest(array[1,2,3,4,5,6]) y
zwróci 12 rekordów: 2x6
Ale ..
SELECT unnest(array[1,2]) x, unnest(array[1,2,3,4,5,6]) y
nie zwraca 12 rekordów, tylko 6! :) Tej składni możemy użyć do wyszukiwania NWW, gdybyśmy czasem chcieli robić to bazą danych... :)
Np. NWW 16 i 34 (nie wiem...):
select count(*) from
(
select generate_series(1,16), generate_series(1,34)
) x
wynik - 272. (muszę sprawdzić - =NAJMN.WSP.WIEL(16;34) z Excela daje taki sam wynik :))
a jaki jest odpowiednik unnest i array w Oraclu albo MS SQL? bo pierwszy raz takie coś widzę.
Posługuję się tu unnest() + array[], albo dla liczb generate_series(), bo te funkcje najszybciej robią mi zbiór rekordów. Możesz oczywiście użyć tabel, jako parametrów wejściowych.
Minął 5 miesiąc pracy nad nową wersją 4programmers.net. Mimo, że pracuje nad projektem niemal codziennie, mimo, że założyłem, że będzie skończony w I kwartale tego roku, to jeszcze sporo zostało do końca :(
Nie o tym jednak miałem pisać. Zrobiłem migrację starej bazy (z MySQL) na PostgreSQL. Struktura tabel jest bardzo podobna. Ku mojemu zaskoczeniu, MySQL (5.5) jest szybsze niż PostgreSQL (9.6), niemal w każdym zapytaniu. Co prawda różnice nie są zbyt duże, ale na bardziej czasochłonnych zapytaniach MySQL wygrywa czasem 20-30 ms na zapytaniu.
#4programmers.net #coyote #mysql #postgresql
Indeksy hipotetyczne. W produkcji średnio się to sprawdzi, ale na poziomie testów jak najbardziej.
http://www.depesz.com/2015/09/07/hypothetical-indexes/
#postgres #sql
Ja się zastanawiam, czemu nie napisałem, że to jest dziwne... :)
Wg mojej dotychczasowej wiedzy UNION zawsze określał typ kolumn na podstawie pierwszego SELECT. A tu nagle można określić typ kolumny w DRUGIM SELECT. Ale pod warunkiem, że w pierwszym nie został wcześniej określony... Taka ciekawostka :)