Skip to content

Instantly share code, notes, and snippets.

View Tyralion's full-sized avatar

Ivan Pilyaev Tyralion

  • Russia, Chelyabinsk
View GitHub Profile
CREATE OR REPLACE FUNCTION rules_audit() RETURNS TRIGGER
LANGUAGE plpgsql
AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
DELETE FROM user_rules WHERE rule_id = OLD.id;
DELETE FROM group_rules WHERE rule_id = OLD.id;
CREATE OR REPLACE FUNCTION item_price(
uid integer, -- ид клиента
item items, -- товары
markup numeric -- пользовательская наценка на товары
) RETURNS numeric
AS $BODY$
DECLARE
val numeric;
fix_val numeric;
max_price numeric;
#
# Global conf
#
Ant.config do
tag :p do ->(args, options, content, tags) {
"<p>#{content}</p>"
}
end
@Tyralion
Tyralion / handler.lua
Created May 2, 2018 10:32 — forked from samael500/handler.lua
Validating payloads from GitHub webhooks with Nginx + Lua
-- luarocks install JSON4Lua
-- luarocks install luacrypto
local json = require "json"
local crypto = require "crypto"
local secret = '<MY SUPER SECRET>'
local event = 'push'
local branch = 'refs/heads/master'
@Tyralion
Tyralion / tokens.md
Created March 15, 2018 06:31 — forked from zmts/tokens.md
Про токены, JSON Web Tokens (JWT), аутентификацию и авторизацию

Token-Based Authentication(JWT)

Preconditions:

В данной заметке рассматривается работа JWT с симметичным алгоритмом шифрования (HS256/HS384/HS512)

Основы:

Аутентификация(authentication, от греч. αὐθεντικός [authentikos] – реальный, подлинный; от αὐθέντης [authentes] – автор) - это процесс проверки учётных данных пользователя (логин/пароль). Проверка подлинности пользователя путём сравнения введённого им логина/пароля с логином/паролем, сохранённым в базе данных пользователей.

Авторизация(authorization — разрешение, уполномочивание) - это проверка прав пользователя на доступ к определенным ресурсам.

@Tyralion
Tyralion / letsencrypt_2017.md
Created March 14, 2018 10:24 — forked from cecilemuller/letsencrypt_2020.md
How to setup Let's Encrypt for Nginx on Ubuntu 16.04 (including IPv6, HTTP/2 and A+ SLL rating)

How to setup Let's Encrypt for Nginx on Ubuntu 16.04 (including IPv6, HTTP/2 and A+ SLL rating)

There are two main modes to run the Let's Encrypt client (called Certbot):

  • Standalone: replaces the webserver to respond to ACME challenges
  • Webroot: needs your webserver to serve challenges from a known folder.

Webroot is better because it doesn't need to replace Nginx (to bind to port 80).

In the following, we're setting up mydomain.com. HTML is served from /var/www/mydomain, and challenges are served from /var/www/letsencrypt.

EXPLAIN ANALYZE WITH Prefiltered AS (SELECT * FROM items WHERE name ILIKE '%кол%' AND name ILIKE '%пер%') SELECT * FROM Prefiltered WHERE name ILIKE '%08%';
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------
CTE Scan on prefiltered (cost=2814.22..2835.77 rows=192 width=2965) (actual time=1.550..11.602 rows=68 loops=1)
Filter: ((name)::text ~~* '%08%'::text)
Rows Removed by Filter: 972
CTE prefiltered
-> Bitmap Heap Scan on items (cost=37.82..2814.22 rows=958 width=800) (actual time=1.103..8.147 rows=1040 loops=1)
Recheck Cond: (((name)::text ~~* '%кол%'::text) AND ((name)::text ~~* '%пер%'::text))
Heap Blocks: exact=929
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
CREATE OR REPLACE FUNCTION item_price(
uid integer,
item items
) RETURNS numeric
AS $BODY$
DECLARE
val numeric;
fix_val numeric;
max_price numeric;
prid varchar(255);
@Tyralion
Tyralion / postgres.txt
Created January 24, 2017 05:36
Партиционирование и равномерное распределение данных
Есть таблица Crosses. В ней 132 миллиона записей. Таблица разбират на партиции вида:
Crosses_1, Crosses_2 и тд. в каждой из таблиц по 20 миллионов записей.
СОздание партиций и выбор партиции для вставки осуществляется через хранимку. В хранимке смотрится последний используемый идентификатор при вставке и на этом основании осуществляется выбор партиции (вставка в существующую или создание нвоой партиции и вставка в нее).
Так как данных вставляется очень много поэтому вставка данных осуществляется через INSERT ... VALUES ... ON CONFLICT DO NOTHING где проверяется уникальность индекса. То есть получается что в некоторых ситуациях партиция может быть заполнена не на 100% (такая вот разряженная таблица). Так же бывают массовые (убийства) удаления данных. В общем, инкрсементный счетчик растет и плодятся партиции.
Вопрос: есть ли программки/скрипты которые осуществляют рамномерный перенос данных по всем партициям?