Builder

web application developer blog

Hybrit Data Model 2. Bölüm: PostgreSQL’de JSON sorguları

Hibrit Datamodelin ne olduğuna dair daha önceki yazımı kaçıranlar şuradan başlayabilirler. Bu yazımda kullandığım örneklerde, öncekinden farklı olarak JSONB veri tipi var. JSONB Postgresql’de Binary JSON veri tipidir ve 9.4 versiyonundan itibaren desteklenmektedir.

Hibrit Datamodel’de JSON sorgusu örneklerine başlamadan önce, örnek bir tablomuz olması lazım:

CREATE TABLE public.tbl_product (
  product_id    bigserial NOT NULL PRIMARY KEY,
  product_name  varchar(255),
  brand_id      integer,
  category_id   integer,
  attributes    jsonb,
  synonyms      jsonb, 
  created_at    timestamp WITHOUT TIME ZONE,
  updated_at    timestamp WITHOUT TIME ZONE
) WITH (
    OIDS = FALSE
  );

Bir de bu tabloda sql sorguları yapabileceğimiz örnek kayıtlara ihtiyacımız var.

INSERT INTO tbl_product (product_id, product_name, brand_id, category_id, attributes, created_at, updated_at, synonyms) VALUES
  (1, 'Apple iPhone 6S 16GB Cep Telefonu', 1, 1, E'{\"ram\": 2048, \"agirlik\": 143, \"pil_gucu\": 1715, \"kameralar\": [\"ön\", \"arka\"], \"ekran_boyutu\": 4.7, \"dahili_hafiza\": 16, \"kamera_cozunurlugu\": 12, \"arttirilabilir_hafiza\": false}', '2016-09-17 08:50:38', '2016-09-17 08:50:40', E'[{\"name\": \"Apple iPhone 6S 16GB Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb cep telefonu\"}, {\"name\": \"iPhone 6S 16GB Cep Telefonu\", \"slug\": \"iphone 6s 16gb cep telefonu\"}, {\"name\": \"Apple iPhone 6S Uzay Gri (Space Gray) 16 GB\", \"slug\": \"apple iphone 6s uzay gri space gray 16 gb\"}, {\"name\": \"iPhone 6S Uzay Gri (Space Gray) 16 GB\", \"slug\": \"iphone 6s uzay gri space gray 16 gb\"}, {\"name\": \"Apple iPhone 6s 16gb Gümüş (Apple Türkiye Garantili) Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb gumus apple turkiye garantili cep telefonu\"}, {\"name\": \"iPhone 6s 16gb Gümüş ( Türkiye Garantili) Cep Telefonu\", \"slug\": \"iphone 6s 16gb gumus turkiye garantili cep telefonu\"}, {\"name\": \"APPLE iPhone 6s 16 GB Gold Akıllı Telefon Apple Türkiye Garantili\", \"slug\": \"apple iphone 6s 16 gb gold akilli telefon apple turkiye garantili\"}, {\"name\": \"APPLE iPhone 6s 16 GB Gold Akıllı Telefon  Türkiye Garantili\", \"slug\": \"apple iphone 6s 16 gb gold akilli telefon turkiye garantili\"}, {\"name\": \"Apple iPhone 6S 16 GB - Uzay Grisi\", \"slug\": \"apple iphone 6s 16 gb - uzay grisi\"}, {\"name\": \"iPhone 6S 16 GB - Uzay Grisi\", \"slug\": \"iphone 6s 16 gb - uzay grisi\"}, {\"name\": \"Apple APPLE İPHONE 6s 16 GB UZAY GRİ MKQJ2TUA DİST\", \"slug\": \"apple apple iphone 6s 16 gb uzay gri mkqj2tua dist\"}, {\"name\": \"APPLE İPHONE 6s 16 GB UZAY GRİ MKQJ2TUA DİST\", \"slug\": \"apple iphone 6s 16 gb uzay gri mkqj2tua dist\"}, {\"name\": \"Apple APPLE iPhone 6S 16GB ROSE GOLD AKILLI TELEFON\", \"slug\": \"apple apple iphone 6s 16gb rose gold akilli telefon\"}, {\"name\": \"APPLE iPhone 6S 16GB ROSE GOLD AKILLI TELEFON\", \"slug\": \"apple iphone 6s 16gb rose gold akilli telefon\"}, {\"name\": \"Apple iPhone 6S 16Gb\", \"slug\": \"apple iphone 6s 16gb\"}, {\"name\": \"iPhone 6S 16Gb\", \"slug\": \"iphone 6s 16gb\"}, {\"name\": \"Apple iPhone 6S 16 GB - Silver\", \"slug\": \"apple iphone 6s 16 gb - silver\"}, {\"name\": \"iPhone 6S 16 GB - Silver\", \"slug\": \"iphone 6s 16 gb - silver\"}, {\"name\": \"Apple iPhone 6S 16 GB - Rose Gold\", \"slug\": \"apple iphone 6s 16 gb - rose gold\"}, {\"name\": \"iPhone 6S 16 GB - Rose Gold\", \"slug\": \"iphone 6s 16 gb - rose gold\"}, {\"name\": \"Apple iPhone 6S 16 GB (Apple Türkiye Garantili) - Rose Gold\", \"slug\": \"apple iphone 6s 16 gb apple turkiye garantili - rose gold\"}, {\"name\": \"iPhone 6S 16 GB ( Türkiye Garantili) - Rose Gold\", \"slug\": \"iphone 6s 16 gb turkiye garantili - rose gold\"}, {\"name\": \"Apple iPhone 6S 16 GB (Apple Türkiye Garantili) - Altın\", \"slug\": \"apple iphone 6s 16 gb apple turkiye garantili - altin\"}, {\"name\": \"iPhone 6S 16 GB ( Türkiye Garantili) - Altın\", \"slug\": \"iphone 6s 16 gb turkiye garantili - altin\"}, {\"name\": \"Apple iPhone 6S 16 GB (Apple Türkiye Garantili) - Silver\", \"slug\": \"apple iphone 6s 16 gb apple turkiye garantili - silver\"}, {\"name\": \"iPhone 6S 16 GB ( Türkiye Garantili) - Silver\", \"slug\": \"iphone 6s 16 gb turkiye garantili - silver\"}, {\"name\": \"Apple iPhone 6s 16GB Garantili Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb garantili cep telefonu\"}, {\"name\": \"iPhone 6s 16GB Garantili Cep Telefonu\", \"slug\": \"iphone 6s 16gb garantili cep telefonu\"}, {\"name\": \"Apple iPhone 6S 16GB Cep Telefonu (Apple Türkiye)\", \"slug\": \"apple iphone 6s 16gb cep telefonu apple turkiye \"}, {\"name\": \"iPhone 6S 16GB Cep Telefonu ( Türkiye)\", \"slug\": \"iphone 6s 16gb cep telefonu turkiye \"}, {\"name\": \"Apple iPhone 6S 16GB GOLD SELFİE ÇUBUK HEDİYELİ !\", \"slug\": \"apple iphone 6s 16gb gold selfie cubuk hediyeli \"}, {\"name\": \"iPhone 6S 16GB GOLD SELFİE ÇUBUK HEDİYELİ !\", \"slug\": \"iphone 6s 16gb gold selfie cubuk hediyeli \"}, {\"name\": \"Apple APPLE İPHONE 6s 16 GB ROSE GOLD MKQM2TUA DİST\", \"slug\": \"apple apple iphone 6s 16 gb rose gold mkqm2tua dist\"}, {\"name\": \"APPLE İPHONE 6s 16 GB ROSE GOLD MKQM2TUA DİST\", \"slug\": \"apple iphone 6s 16 gb rose gold mkqm2tua dist\"}, {\"name\": \"Apple iPhone 6S 16GB Gümüş Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb gumus cep telefonu\"}, {\"name\": \"iPhone 6S 16GB Gümüş Cep Telefonu\", \"slug\": \"iphone 6s 16gb gumus cep telefonu\"}, {\"name\": \"Apple iPhone 6S 16GB Altın Rengi Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb altin rengi cep telefonu\"}, {\"name\": \"iPhone 6S 16GB Altın Rengi Cep Telefonu\", \"slug\": \"iphone 6s 16gb altin rengi cep telefonu\"}, {\"name\": \"Apple iPhone 6S 16GB Rose Altın Rengi Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb rose altin rengi cep telefonu\"}, {\"name\": \"iPhone 6S 16GB Rose Altın Rengi Cep Telefonu\", \"slug\": \"iphone 6s 16gb rose altin rengi cep telefonu\"}, {\"name\": \"Apple iPhone 6S 16GB Uzay Gri Cep Telefonu\", \"slug\": \"apple iphone 6s 16gb uzay gri cep telefonu\"}, {\"name\": \"iPhone 6S 16GB Uzay Gri Cep Telefonu\", \"slug\": \"iphone 6s 16gb uzay gri cep telefonu\"}, {\"name\": \"Apple iPhone 6S 16 GB Cep Telefonu (Apple Türkiye)\", \"slug\": \"apple iphone 6s 16 gb cep telefonu apple turkiye \"}, {\"name\": \"iPhone 6S 16 GB Cep Telefonu ( Türkiye)\", \"slug\": \"iphone 6s 16 gb cep telefonu turkiye \"}, {\"name\": \"Apple APPLE 12MP DUAL CORE 4G 16GB IPHONE 6S GÜMÜŞ MKQK2TU-A\", \"slug\": \"apple apple 12mp dual core 4g 16gb iphone 6s gumus mkqk2tu-a\"}, {\"name\": \"APPLE 12MP DUAL CORE 4G 16GB IPHONE 6S GÜMÜŞ MKQK2TU-A\", \"slug\": \"apple 12mp dual core 4g 16gb iphone 6s gumus mkqk2tu-a\"}, {\"name\": \"Apple iPhone 6S 16GB Cep Telefonu (Apple Türkiye Garantili)\", \"slug\": \"apple iphone 6s 16gb cep telefonu apple turkiye garantili \"}, {\"name\": \"iPhone 6S 16GB Cep Telefonu ( Türkiye Garantili)\", \"slug\": \"iphone 6s 16gb cep telefonu turkiye garantili \"}, {\"name\": \"Apple iPhone 6S 16GB (Resmi ithalat)\", \"slug\": \"apple iphone 6s 16gb resmi ithalat \"}, {\"name\": \"iPhone 6S 16GB (Resmi ithalat)\", \"slug\": \"iphone 6s 16gb resmi ithalat \"}, {\"name\": \"Apple iPhone 6S Gümüş (Silver) 16 GB\", \"slug\": \"apple iphone 6s gumus silver 16 gb\"}, {\"name\": \"iPhone 6S Gümüş (Silver) 16 GB\", \"slug\": \"iphone 6s gumus silver 16 gb\"}, {\"name\": \"Apple İphone 6S 16GB Rose Gold Cep Telefonu (Apple Türkiye Garantili)\", \"slug\": \"apple iphone 6s 16gb rose gold cep telefonu apple turkiye garantili \"}, {\"name\": \"İphone 6S 16GB Rose Gold Cep Telefonu ( Türkiye Garantili)\", \"slug\": \"iphone 6s 16gb rose gold cep telefonu turkiye garantili \"}, {\"name\": \"Apple İphone 6S 16GB Sılver Cep Telefonu (Apple Türkiye Garantili)\", \"slug\": \"apple iphone 6s 16gb silver cep telefonu apple turkiye garantili \"}, {\"name\": \"İphone 6S 16GB Sılver Cep Telefonu ( Türkiye Garantili)\", \"slug\": \"iphone 6s 16gb silver cep telefonu turkiye garantili \"}, {\"name\": \"Apple İphone 6S 16GB Gold Cep Telefonu (Apple Türkiye Garantili)\", \"slug\": \"apple iphone 6s 16gb gold cep telefonu apple turkiye garantili \"}, {\"name\": \"İphone 6S 16GB Gold Cep Telefonu ( Türkiye Garantili)\", \"slug\": \"iphone 6s 16gb gold cep telefonu turkiye garantili \"}, {\"name\": \"Apple İphone 6S 16GB Uzay Gri Cep Telefonu (Apple Türkiye Garantili)\", \"slug\": \"apple iphone 6s 16gb uzay gri cep telefonu apple turkiye garantili \"}, {\"name\": \"İphone 6S 16GB Uzay Gri Cep Telefonu ( Türkiye Garantili)\", \"slug\": \"iphone 6s 16gb uzay gri cep telefonu turkiye garantili \"}, {\"name\": \"Apple iPhone 6s MKQM2TU/A (16GB Roze Altın)\", \"slug\": \"apple iphone 6s mkqm2tu a 16gb roze altin \"}, {\"name\": \"iPhone 6s MKQM2TU/A (16GB Roze Altın)\", \"slug\": \"iphone 6s mkqm2tu a 16gb roze altin \"}, {\"name\": \"Apple iPhone 6s MKQL2TU/A (16GB Altın)\", \"slug\": \"apple iphone 6s mkql2tu a 16gb altin \"}, {\"name\": \"iPhone 6s MKQL2TU/A (16GB Altın)\", \"slug\": \"iphone 6s mkql2tu a 16gb altin \"}, {\"name\": \"Apple iPhone 6s MKQJ2TU/A (16GB Uzay Grisi)\", \"slug\": \"apple iphone 6s mkqj2tu a 16gb uzay grisi \"}, {\"name\": \"iPhone 6s MKQJ2TU/A (16GB Uzay Grisi)\", \"slug\": \"iphone 6s mkqj2tu a 16gb uzay grisi \"}, {\"name\": \"Apple iPhone 6s MKQK2TU/A (16GB Gümüş)\", \"slug\": \"apple iphone 6s mkqk2tu a 16gb gumus \"}, {\"name\": \"iPhone 6s MKQK2TU/A (16GB Gümüş)\", \"slug\": \"iphone 6s mkqk2tu a 16gb gumus \"}]'),
  (2, 'Samsung Galaxy Note 5 Cep Telefonu', 2, 1, E'{\"ram\": 4096, \"agirlik\": 171, \"pil_gucu\": 3000, \"kameralar\": [\"ön\", \"arka\"], \"ekran_boyutu\": 5.7, \"dahili_hafiza\": 32, \"kamera_cozunurlugu\": 16, \"arttirilabilir_hafiza\": false}', '2016-09-17 09:03:08', '2016-09-17 09:03:10', E'[{\"name\": \"Samsung Galaxy Note 5 Cep Telefonu\", \"slug\": \"samsung galaxy note 5 cep telefonu\"}, {\"name\": \"Galaxy Note 5 Cep Telefonu\", \"slug\": \"galaxy note 5 cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C 32Gb Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c 32gb cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C 32Gb Cep Telefonu\", \"slug\": \"galaxy note 5 n920c 32gb cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 32 GB - Siyah\", \"slug\": \"samsung galaxy note 5 32 gb - siyah\"}, {\"name\": \"Galaxy Note 5 32 GB - Siyah\", \"slug\": \"galaxy note 5 32 gb - siyah\"}, {\"name\": \"Samsung Galaxy N920 Note 5 32 GB Cep Telefonu Siyah\", \"slug\": \"samsung galaxy n920 note 5 32 gb cep telefonu siyah\"}, {\"name\": \"Galaxy N920 Note 5 32 GB Cep Telefonu Siyah\", \"slug\": \"galaxy n920 note 5 32 gb cep telefonu siyah\"}, {\"name\": \"Samsung Galaxy Note 5 Beyaz ( Samsung Türkiye Garantili ) Cep Telefonu\", \"slug\": \"samsung galaxy note 5 beyaz samsung turkiye garantili cep telefonu\"}, {\"name\": \"Galaxy Note 5 Beyaz (  Türkiye Garantili ) Cep Telefonu\", \"slug\": \"galaxy note 5 beyaz turkiye garantili cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 Siyah Cep Telefonu\", \"slug\": \"samsung galaxy note 5 siyah cep telefonu\"}, {\"name\": \"Galaxy Note 5 Siyah Cep Telefonu\", \"slug\": \"galaxy note 5 siyah cep telefonu\"}, {\"name\": \"SAMSUNG Galaxy Note 5 N920 32 GB Siyah Akıllı Telefon Samsung Türkiye Garantili\", \"slug\": \"samsung galaxy note 5 n920 32 gb siyah akilli telefon samsung turkiye garantili\"}, {\"name\": \"SAMSUNG Galaxy Note 5 N920 32 GB Siyah Akıllı Telefon  Türkiye Garantili\", \"slug\": \"samsung galaxy note 5 n920 32 gb siyah akilli telefon turkiye garantili\"}, {\"name\": \"Samsung Galaxy N920 Note 5\", \"slug\": \"samsung galaxy n920 note 5\"}, {\"name\": \"Galaxy N920 Note 5\", \"slug\": \"galaxy n920 note 5\"}, {\"name\": \"Samsung Galaxy Note 5 32 GB - Altın\", \"slug\": \"samsung galaxy note 5 32 gb - altin\"}, {\"name\": \"Galaxy Note 5 32 GB - Altın\", \"slug\": \"galaxy note 5 32 gb - altin\"}, {\"name\": \"Samsung Galaxy Note 5 32 GB - Beyaz\", \"slug\": \"samsung galaxy note 5 32 gb - beyaz\"}, {\"name\": \"Galaxy Note 5 32 GB - Beyaz\", \"slug\": \"galaxy note 5 32 gb - beyaz\"}, {\"name\": \"Samsung Galaxy N920 Note 5 - Altın\", \"slug\": \"samsung galaxy n920 note 5 - altin\"}, {\"name\": \"Galaxy N920 Note 5 - Altın\", \"slug\": \"galaxy n920 note 5 - altin\"}, {\"name\": \"Samsung Galaxy N920 Note 5 - Beyaz\", \"slug\": \"samsung galaxy n920 note 5 - beyaz\"}, {\"name\": \"Galaxy N920 Note 5 - Beyaz\", \"slug\": \"galaxy n920 note 5 - beyaz\"}, {\"name\": \"Samsung N920 Galaxy Note 5 Siyah Cep Telefonu (İthalatçı Garantili)\", \"slug\": \"samsung n920 galaxy note 5 siyah cep telefonu ithalatci garantili \"}, {\"name\": \"N920 Galaxy Note 5 Siyah Cep Telefonu (İthalatçı Garantili)\", \"slug\": \"n920 galaxy note 5 siyah cep telefonu ithalatci garantili \"}, {\"name\": \"Samsung N920 Galaxy Note 5 Siyah Cep Telefonu (Distribütör Garantili)\", \"slug\": \"samsung n920 galaxy note 5 siyah cep telefonu distributor garantili \"}, {\"name\": \"N920 Galaxy Note 5 Siyah Cep Telefonu (Distribütör Garantili)\", \"slug\": \"n920 galaxy note 5 siyah cep telefonu distributor garantili \"}, {\"name\": \"Samsung N920 Galaxy Note5 Beyaz Cep Telefonu (Dist. Garantili)\", \"slug\": \"samsung n920 galaxy note5 beyaz cep telefonu dist garantili \"}, {\"name\": \"N920 Galaxy Note5 Beyaz Cep Telefonu (Dist. Garantili)\", \"slug\": \"n920 galaxy note5 beyaz cep telefonu dist garantili \"}, {\"name\": \"Samsung N920 Galaxy Note 5 Gold Cep Telefonu (Distribütör Garantili)\", \"slug\": \"samsung n920 galaxy note 5 gold cep telefonu distributor garantili \"}, {\"name\": \"N920 Galaxy Note 5 Gold Cep Telefonu (Distribütör Garantili)\", \"slug\": \"n920 galaxy note 5 gold cep telefonu distributor garantili \"}, {\"name\": \"Samsung N920 Galaxy Note 5 Silver Cep Telefonu (Distribütör Garantili)\", \"slug\": \"samsung n920 galaxy note 5 silver cep telefonu distributor garantili \"}, {\"name\": \"N920 Galaxy Note 5 Silver Cep Telefonu (Distribütör Garantili)\", \"slug\": \"n920 galaxy note 5 silver cep telefonu distributor garantili \"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 N920C CEP TELEFONU\", \"slug\": \"samsung samsung galaxy note 5 n920c cep telefonu\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 N920C CEP TELEFONU\", \"slug\": \"samsung galaxy note 5 n920c cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C Akıllı Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c akilli cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C Akıllı Cep Telefonu\", \"slug\": \"galaxy note 5 n920c akilli cep telefonu\"}, {\"name\": \"Samsung SAMSUNG N920 GALAXY NOTE 5 GOLD İTH\", \"slug\": \"samsung samsung n920 galaxy note 5 gold ith\"}, {\"name\": \"SAMSUNG N920 GALAXY NOTE 5 GOLD İTH\", \"slug\": \"samsung n920 galaxy note 5 gold ith\"}, {\"name\": \"Samsung Galaxy Note 5 32 GB- Gold (İthalatçı Garantili)\", \"slug\": \"samsung galaxy note 5 32 gb- gold ithalatci garantili \"}, {\"name\": \"Galaxy Note 5 32 GB- Gold (İthalatçı Garantili)\", \"slug\": \"galaxy note 5 32 gb- gold ithalatci garantili \"}, {\"name\": \"Samsung N920C Galaxy Note 5 4.5G 32GB Gold Cep Telefonu\", \"slug\": \"samsung n920c galaxy note 5 4 5g 32gb gold cep telefonu\"}, {\"name\": \"N920C Galaxy Note 5 4.5G 32GB Gold Cep Telefonu\", \"slug\": \"n920c galaxy note 5 4 5g 32gb gold cep telefonu\"}, {\"name\": \"Samsung N920C Galaxy Note 5 4G 32GB Siyah Cep Telefonu\", \"slug\": \"samsung n920c galaxy note 5 4g 32gb siyah cep telefonu\"}, {\"name\": \"N920C Galaxy Note 5 4G 32GB Siyah Cep Telefonu\", \"slug\": \"n920c galaxy note 5 4g 32gb siyah cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C Gold Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c gold cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C Gold Cep Telefonu\", \"slug\": \"galaxy note 5 n920c gold cep telefonu\"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 N920C 32 GB AKILLI TELEFON\", \"slug\": \"samsung samsung galaxy note 5 n920c 32 gb akilli telefon\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 N920C 32 GB AKILLI TELEFON\", \"slug\": \"samsung galaxy note 5 n920c 32 gb akilli telefon\"}, {\"name\": \"Samsung N920C Galaxy Note 5 Cep Telefonu\", \"slug\": \"samsung n920c galaxy note 5 cep telefonu\"}, {\"name\": \"N920C Galaxy Note 5 Cep Telefonu\", \"slug\": \"n920c galaxy note 5 cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C 32 GB Siyah Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c 32 gb siyah cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C 32 GB Siyah Cep Telefonu\", \"slug\": \"galaxy note 5 n920c 32 gb siyah cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C 32 GB Gümüş Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c 32 gb gumus cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C 32 GB Gümüş Cep Telefonu\", \"slug\": \"galaxy note 5 n920c 32 gb gumus cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C 32 GB Beyaz Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c 32 gb beyaz cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C 32 GB Beyaz Cep Telefonu\", \"slug\": \"galaxy note 5 n920c 32 gb beyaz cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 N920C 32 GB Gold Cep Telefonu\", \"slug\": \"samsung galaxy note 5 n920c 32 gb gold cep telefonu\"}, {\"name\": \"Galaxy Note 5 N920C 32 GB Gold Cep Telefonu\", \"slug\": \"galaxy note 5 n920c 32 gb gold cep telefonu\"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 SİLVER CEP TELEFONU\", \"slug\": \"samsung samsung galaxy note 5 silver cep telefonu\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 SİLVER CEP TELEFONU\", \"slug\": \"samsung galaxy note 5 silver cep telefonu\"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 BEYAZ CEP TELEFONU\", \"slug\": \"samsung samsung galaxy note 5 beyaz cep telefonu\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 BEYAZ CEP TELEFONU\", \"slug\": \"samsung galaxy note 5 beyaz cep telefonu\"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 SİYAH CEP TELEFONU\", \"slug\": \"samsung samsung galaxy note 5 siyah cep telefonu\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 SİYAH CEP TELEFONU\", \"slug\": \"samsung galaxy note 5 siyah cep telefonu\"}, {\"name\": \"Samsung SAMSUNG GALAXY NOTE 5 GOLD CEP TELEFONU\", \"slug\": \"samsung samsung galaxy note 5 gold cep telefonu\"}, {\"name\": \"SAMSUNG GALAXY NOTE 5 GOLD CEP TELEFONU\", \"slug\": \"samsung galaxy note 5 gold cep telefonu\"}, {\"name\": \"Samsung Galaxy Note 5 Cep Telefonu (Samsung Türkiye)\", \"slug\": \"samsung galaxy note 5 cep telefonu samsung turkiye \"}, {\"name\": \"Galaxy Note 5 Cep Telefonu ( Türkiye)\", \"slug\": \"galaxy note 5 cep telefonu turkiye \"}]'),
  (3, 'HTC One M8 Cep Telefonu', 3, 1, E'{\"ram\": 2048, \"agirlik\": 160, \"pil_gucu\": 2600, \"kameralar\": [\"ön\", \"arka\", \"arka stereo\"], \"ekran_boyutu\": 5, \"dahili_hafiza\": 16, \"kamera_cozunurlugu\": 4, \"arttirilabilir_hafiza\": true}', '2016-09-17 09:18:01', '2016-09-17 09:18:03', E'[{\"name\": \"HTC One M8 Cep Telefonu\", \"slug\": \"htc one m8 cep telefonu\"}, {\"name\": \"One M8 Cep Telefonu\", \"slug\": \"one m8 cep telefonu\"}, {\"name\": \"HTC One M8\", \"slug\": \"htc one m8\"}, {\"name\": \"One M8\", \"slug\": \"one m8\"}, {\"name\": \"HTC One M8 - Kurşun Gri\", \"slug\": \"htc one m8 - kursun gri\"}, {\"name\": \"One M8 - Kurşun Gri\", \"slug\": \"one m8 - kursun gri\"}, {\"name\": \"HTC One M8 - Kurşun Gri\", \"slug\": \"htc one m8 - kursun gri\"}, {\"name\": \"One M8 - Kurşun Gri\", \"slug\": \"one m8 - kursun gri\"}, {\"name\": \"HTC ONE M8 CEP TELEFONU\", \"slug\": \"htc one m8 cep telefonu\"}, {\"name\": \"ONE M8 CEP TELEFONU\", \"slug\": \"one m8 cep telefonu\"}, {\"name\": \"HTC ONE M8 CEP TELEFONU\", \"slug\": \"htc one m8 cep telefonu\"}, {\"name\": \"ONE M8 CEP TELEFONU\", \"slug\": \"one m8 cep telefonu\"}, {\"name\": \"HTC One M8 - Gümüş\", \"slug\": \"htc one m8 - gumus\"}, {\"name\": \"One M8 - Gümüş\", \"slug\": \"one m8 - gumus\"}, {\"name\": \"HTC One M8 - Gümüş\", \"slug\": \"htc one m8 - gumus\"}, {\"name\": \"One M8 - Gümüş\", \"slug\": \"one m8 - gumus\"}, {\"name\": \"HTC One M8 16Gb Gray\", \"slug\": \"htc one m8 16gb gray\"}, {\"name\": \"One M8 16Gb Gray\", \"slug\": \"one m8 16gb gray\"}, {\"name\": \"HTC One M8 16Gb Gray\", \"slug\": \"htc one m8 16gb gray\"}, {\"name\": \"One M8 16Gb Gray\", \"slug\": \"one m8 16gb gray\"}]');

Üç telefon kaydımız var. Bu telefonların örnek özellikleri ve alternatif isimleri var. Bunlar JSON formatında ve JSONB veri türünde. Şimdi SQL ile sorgulamaya başlayalım. İlk önce basit bir SQL sorgusu:

 

PostgreSQL JSONB karşılaştırma Sorgusu:

RAM’i 2 GB dan büyük olanlar

SELECT 
  public.tbl_product.product_name
FROM
  public.tbl_product
WHERE
(tbl_product.attributes->>'ram')::integer > 2048

Sonuç:

product_name
Samsung Galaxy Note 5 Cep Telefonu

PostgreSQL JSONB İçeren Sorgusu:

Kameralarından birisi “arka stereo” olanlar:

SELECT 
  public.tbl_product.product_name
FROM
  public.tbl_product
WHERE
(tbl_product.attributes->>'kameralar')::jsonb @> '["arka stereo"]'::jsonb;

Burada içeren sorgusu yazılırken, (tbl_product.attributes->>’kameralar’)::jsonb seçimi ile elde edilen yeni json verisinde ‘[“arka stereo”]’::jsonb ile belittiğimiz sring dizisi var mıdır? şeklinde bir sorgu oluşuyor.

Sonuç:

product_name
HTC One M8 Cep Telefonu

PostgreSQL JSONB Gelişmiş İçeren Sorgusu

Ürünün synonymleri arasından herhangi birisinin slug’ı “one m8 16gb gray” yada “htc one m8 16gb gray” olanlar:

Burada iki diziyi kesiştirip, kesişiminde bir eleman olup olmadığı sorgulanacaktır. Dikkat edilmesi gereken nokta json içinde arama yapılırken, aranan json’ın da aynı yapıda olması. Burada synonyms bir dizi olduğu için aranan her bir slug önce bir dizi ardında bir nesne yapısında yazılmıştır.

SELECT 
  public.tbl_product.product_name
FROM
  public.tbl_product
WHERE
tbl_product.synonyms::jsonb @> ANY (ARRAY['[{"slug":"one m8 16gb gray"}]','[{"slug":"htc one m8 16gb gray"}]']::jsonb[])

Sonuç:

product_name
HTC One M8 Cep Telefonu

PostgreSQL JSONB Regex’li İçeren Sorgusu

Ürün synonym’i “note” yada “one” kelimesini içerenler:

Burada kelime bazlı bir arama yaptığımız için anahtar kelimelerin başına ve sonunda boşluk olmalı yada anahtar kelime cümlenin başında veya sonunda ise tek bir yanında boşluk olmalı. Aksi taktirde “iphone” kelimesi de “one” kelimesini içerdiği için bu sorguya yakalancaktır.

SELECT 
  public.tbl_product.product_name
FROM
  public.tbl_product
WHERE 
array_to_string(array(select jsonb_array_elements(synonyms) ->> 'slug'),'|') ~ '(^one |^note | one$| note$| one | note )'

Sonuç:

product_name
Samsung Galaxy Note 5 Cep Telefonu
HTC One M8 Cep Telefonu

PostgreSQL JSONB iki dizinin kesişimini sorgulamak

Kamera dizisi ile  “Ön”,”Arka”,”Arka Stereo” verilerinden  en az birisi ortak olanlar:

Bu işlemi yapabilmek için bir fonksiyon tanımlaması yapmamız gerekiyor.

CREATE OR REPLACE FUNCTION public.jsonb_array_to_text_array
(
  IN  p_input  jsonb
)
RETURNS text[] AS
$$
DECLARE v_output text[];

BEGIN

  SELECT array_agg(ary)::text[]
  INTO v_output
  FROM jsonb_array_elements_text(p_input) AS ary;

  RETURN v_output;

END;
$$
LANGUAGE 'plpgsql';

ALTER FUNCTION public.jsonb_array_to_text_array(jsonb)
  OWNER TO postgres;

Bu fonksiyon, postgresql’in standart fonksiyonları tarafından şimdilik yapılamayan, json => array dönüşümünü yapıyor.

Şimdi sorgumuzu yazacak olursak:

SELECT 
  public.tbl_product.product_name
FROM
  public.tbl_product
WHERE 
jsonb_array_to_text_array((public.tbl_product.attributes->>'kameralar')::jsonb) && ARRAY['ön','arka','arka stereo']

Sonuç:

product_name
Apple iPhone 6S 16GB Cep Telefonu
Samsung Galaxy Note 5 Cep Telefonu
HTC One M8 Cep Telefonu

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir