PostgreSQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PostgreSQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

24 Temmuz 2018 Salı

PostgreSQL

Fonksiyonlar
Copy
CSV dosyasını tabloya yüklemek için şöyle yaparız.
COPY Customer
FROM 'C:\Users\Public\Vaseis\Customer.txt' DELIMITER ',' CSV HEADER;
CURRENT_TIMESTAMP 
Çözünürlüğü mikrosaniye seviyesinde ancak timestamp değeri pek sık güncellenmiyor bu yüzden arka arkaya iki select aynı sonucu verebilir.

Örnek
Şöyle yaparız.
postgres=# select current_timestamp;
       current_timestamp       
-------------------------------
 2018-08-06 02:41:42.472163+02
(1 Zeile)

postgres=# select current_timestamp;
       current_timestamp       
-------------------------------
 2018-08-06 02:41:42.472163+02
(1 Zeile)
Date
String'den date döndürür. Şöyle yaparız.
UPDATE temp
   SET temp_date = temp_date - (date_trunc('year', temp_date ) - date '2016-1-1')
Date_trunc
Date'in belirtilen kısmını döndürür. Şöyle yaparız.
UPDATE temp
   SET temp_date = temp_date - (date_trunc('year', temp_date ) - date '2016-1-1')
Explain
Şöyle yaparız.
EXPLAIN ANALYZE
CREATE TABLE electrothingy
AS
  SELECT
    x::int AS id,
    (x::int % 20000)::int AS locid,  -- fake location ids in the range of 1-20000
    now() AS tsin,                   -- static timestmap
    97.5::numeric(5,2) AS temp,      -- static temp
    x::int AS usage                  -- usage the same as id not sure what we want here.
  FROM generate_series(1,1728000000) -- for 1.7 billion rows
    AS gs(x);
Having
HAVING yazısına taşıdım.

Insert Into
Şöyle yaparız.
INSERT INTO answer (userans, username)
  SELECT 'OptionA', username FROM answer WHERE username = 'Some Name';
Interval
String'den date döndürür. Şöyle yaparız.
UPDATE temp SET temp_date = temp_date - interval '2 years'
WHERE EXTRACT (YEAR FROM temp_date) = 2018;
Partition By 
Örnek
Elimizde şöyle bir tablo olsun
id integer | num integer
___________|_____________
1          | 4 
2          | 4
3          | 5
4          | 6
Gruplamak için şöyle yaparız.

SELECT id, COUNT(id) OVER(PARTITION BY num) from test;

id         | count
___________|_____________
1          | 2 
2          | 2
3          | 1
4          | 1
Similar To
Like cümlelerini or'lamak yerine
WHERE state LIKE '%idle%' OR state LIKE '%disabled%'
Şöyle yaparız
WHERE state SIMILAR TO '%(idle|disabled)%'
to_char metodu
Tarihin yıl alanını almak için şöyle yaparız.
select to_char(now(),'YYYY')
UNION ALL
Örnek
Elimizde şöyle bir tablo olsun.
| id  | ad1    | ad2   | ad3    |
| ----|--------| ------| -------|
| 1   |val_1   |NULL   | NULL   |
| 2   |val_2   |val_1  | NULL   |
| 3   |val_3   |NULL   | val_3  |
Tüm sütunlardaki değerleri saymak için şöyle yaparız.
select t.value, count(*)
from (
   select ad1 value from ad_convention
   union all
   select ad2 value from ad_convention
   union all
   select ad3 value from ad_convention
) t
group by t.value
Çıktı olarak şunu alırız.
| value   | times |
| --------| ------|
| val_1   | 2     |
| val_2   | 1     |
| val_3   | 2     |
Sequence
Şöyle yaparız
CREATE SEQUENCE seq_abcd
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE public.seq_abcd OWNER TO USER_APP;
Stored Procedure
Örnek
Şöyle yaparız.
CREATE OR REPLACE FUNCTION public.getinformations (
  IN stateId integer,
  IN dateStart timestamp,
  IN dateEnd timestamp
)
  RETURNS SETOF DECLAREDTYPE
LANGUAGE plpgsql
AS $$ [...]
Trigger
Trigger'ı tabloya eklemek için şöyle yaparız.
CREATE TRIGGER mytrigger_name AFTER UPDATE ON mytable_name
 FOR EACH ROW EXECUTE PROCEDURE mytrigger();
Örnek
Şöyle yaparız
CREATE OR REPLACE FUNCTION prevent_deletion() 
RETURNS trigger AS $$
BEGIN
  IF current_user != 'user1' THEN
    RAISE EXCEPTION 'You cannot delete records from this table!';
  END IF;  
  RETURN OLD;
END;
$$ LANGUAGE plpgsql;
Örnek
Şöyle yaparız.
CREATE OR REPLACE FUNCTION table_update_notify() RETURNS trigger AS $$
DECLARE
  id bigint;
BEGIN
  IF TG_OP = 'INSERT' THEN
    id = NEW.id;
  ELSE
    id = OLD.id;
  END IF;
  PERFORM pg_notify('my_trigger_name',
    json_build_object('table', TG_TABLE_NAME, 'id', id, 'type', TG_OP)::text);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;