프로젝트 회사 소개
포스트그레SQL - 세계 최고의 고급 오픈 소스 데이터베이스
글 RSS SQL은 30 년 이상의 활성 개발과 강력한 오픈 소스 객체-relational 데이터베이스 시스템입니다. 신뢰성, 기능 견고성 및 성능에 대해 알고, SQL 및 JSON 쿼리를 모두 지원합니다.
본문 바로가기
- 설치
- 기본 명령
- 데이터베이스 운영
- 테이블 운영
- 데이터 타입
- CRUD 운영
- 인덱스
- 통역
- 고급 SQL
- 기능 및 절차
- 트레이더
- 보기 및 Materialized Views
- 사용자 관리
- 백업 및 복원
- 기능 최적화
- 신청
- 확장
- JSON 및 JSONB
- 전체 텍스트 검색
- 모니터링
- 모범 사례
설치하기
우분투 / 데비안
카지노사이트
CentOS/RHEL/페도라
카지노사이트
맥 OS
카지노사이트
윈도우
카지노사이트
기타 제품
카지노사이트
기본 명령
PostgreSQL에 연결
카지노사이트
기본 정보
카지노사이트
psql 메타-commands
카지노사이트
Database 운영
데이터베이스 만들기
카지노사이트
데이터베이스 관리
카지노사이트
Database 정보
ο 회원 관리
테이블 작업
테이블 만들기
카지노사이트
Altering 테이블
카지노사이트
표 정보
카지노사이트
Dropping 테이블
카지노사이트
데이터 유형
숫자 유형
카지노사이트
문자 유형
카지노사이트
날짜 및 시간 유형
카지노사이트
Boolean 유형
카지노사이트
배열 유형
오프화이트
JSON 및 JSONB 유형
카지노사이트
사이트맵 제품정보
오프화이트
Geometric 유형
카지노사이트
프로젝트 영업 시간
지원하다 영업 시간
카지노사이트
제품정보 영업 시간
카지노사이트
공지사항 영업 시간
카지노사이트
계정 만들기 영업 시간
카지노사이트
이름 *
공지사항
카지노사이트
관련 상품
```sql -- List indexes for table \d users SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'users';
-- Show index usage statistics SELECT schemaname, tablename, indexname, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes WHERE tablename = 'users';
-- Show index size SELECT indexname, pg_size_pretty(pg_relation_size(indexname::regclass)) as size FROM pg_indexes WHERE tablename = 'users';
-- Drop index DROP INDEX idx_users_username;
-- Drop index concurrently DROP INDEX CONCURRENTLY idx_users_username;
-- Reindex REINDEX INDEX idx_users_username; REINDEX TABLE users; REINDEX DATABASE mydatabase;
-- Analyze index usage EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM users WHERE username = 'john_doe'; ```의 경우
인덱스 유형
```sql -- B-tree index (default) CREATE INDEX idx_btree ON users(username);
-- Hash index (for equality comparisons) CREATE INDEX idx_hash ON users(id) USING HASH;
-- GIN index (for arrays, JSONB, full-text search) CREATE INDEX idx_gin_tags ON products USING GIN (tags); CREATE INDEX idx_gin_jsonb ON products USING GIN (metadata);
-- GiST index (for geometric data, full-text search) CREATE INDEX idx_gist_location ON locations USING GiST (coordinates);
-- SP-GiST index (for non-balanced data structures) CREATE INDEX idx_spgist ON table_name USING SPGIST (column_name);
-- BRIN index (for very large tables with natural ordering) CREATE INDEX idx_brin_timestamp ON large_table USING BRIN (timestamp);
-- Covering index (includes additional columns) CREATE INDEX idx_covering ON users(username) INCLUDE (email, created_at); ```에 대하여
옵션 정보
기본 키
```sql -- Add primary key during table creation CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) );
-- Add primary key to existing table ALTER TABLE users ADD PRIMARY KEY (id);
-- Composite primary key CREATE TABLE order_items ( order_id INTEGER, product_id INTEGER, quantity INTEGER, PRIMARY KEY (order_id, product_id) );
-- Named primary key constraint CREATE TABLE users ( id SERIAL, username VARCHAR(50), CONSTRAINT pk_users PRIMARY KEY (id) );
-- Drop primary key ALTER TABLE users DROP CONSTRAINT users_pkey; ```의 경우
외국인 키
```sql -- Add foreign key during table creation CREATE TABLE posts ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id), title VARCHAR(200) );
-- Add foreign key to existing table ALTER TABLE posts ADD CONSTRAINT fk_posts_user_id FOREIGN KEY (user_id) REFERENCES users(id);
-- Foreign key with actions ALTER TABLE posts ADD CONSTRAINT fk_posts_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE;
-- Composite foreign key ALTER TABLE order_items ADD CONSTRAINT fk_order_items_order FOREIGN KEY (order_id, customer_id) REFERENCES orders(id, customer_id);
-- Drop foreign key ALTER TABLE posts DROP CONSTRAINT fk_posts_user_id;
-- Show foreign keys SELECT tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name, rc.update_rule, rc.delete_rule FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name JOIN information_schema.referential_constraints AS rc ON tc.constraint_name = rc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY'; ```에 대하여
독특한 제약
```sql -- Add unique constraint during table creation CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE, email VARCHAR(100) UNIQUE );
-- Add unique constraint to existing table ALTER TABLE users ADD CONSTRAINT uk_users_email UNIQUE (email);
-- Composite unique constraint ALTER TABLE users ADD CONSTRAINT uk_users_username_email UNIQUE (username, email);
-- Partial unique constraint CREATE UNIQUE INDEX uk_active_users_email ON users(email) WHERE is_active = TRUE;
-- Drop unique constraint ALTER TABLE users DROP CONSTRAINT uk_users_email; ```의 경우
자주 묻는 질문
카지노사이트
Null 제약 없음
카지노사이트
예외 제약
카지노사이트
고급 SQL
창 기능
카지노사이트
일반 표 표현 (CTE)
카지노사이트
한국어 이름 *
카지노사이트
사이트맵 회사 소개
```sql -- Simple CASE SELECT username, CASE status WHEN 'active' THEN 'User is active' WHEN 'inactive' THEN 'User is inactive' WHEN 'banned' THEN 'User is banned' ELSE 'Unknown status' END as status_description FROM users;
-- Searched CASE SELECT username, salary, CASE WHEN salary < 30000 THEN 'Low' WHEN salary < 60000 THEN 'Medium' WHEN salary < 100000 THEN 'High' ELSE 'Very High' END as salary_category FROM employees;
-- CASE in aggregate SELECT department, COUNT(*) as total_employees, COUNT(CASE WHEN salary > 50000 THEN 1 END) as high_earners, COUNT(CASE WHEN salary <= 50000 THEN 1 END) as low_earners FROM employees GROUP BY department; ```의 경우
이름 *
```sql -- Scalar subquery SELECT username, (SELECT COUNT(*) FROM posts WHERE user_id = users.id) as post_count FROM users;
-- EXISTS subquery SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM posts p WHERE p.user_id = u.id);
-- NOT EXISTS subquery SELECT * FROM users u WHERE NOT EXISTS (SELECT 1 FROM posts p WHERE p.user_id = u.id);
-- IN subquery SELECT * FROM users WHERE id IN (SELECT user_id FROM posts WHERE created_at > '2023-01-01');
-- ANY/ALL subqueries SELECT * FROM products WHERE price > ANY (SELECT price FROM products WHERE category = 'electronics');
SELECT * FROM products WHERE price > ALL (SELECT price FROM products WHERE category = 'books'); ```의 경우
기능 및 절차
내장 기능
카지노사이트
사용자 정의 기능
```sql -- Simple function CREATE OR REPLACE FUNCTION get_user_count() RETURNS INTEGER AS $$ BEGIN RETURN (SELECT COUNT(*) FROM users); END; $$ LANGUAGE plpgsql;
-- Function with parameters CREATE OR REPLACE FUNCTION get_user_by_id(user_id INTEGER) RETURNS TABLE(id INTEGER, username VARCHAR, email VARCHAR) AS $$ BEGIN RETURN QUERY SELECT u.id, u.username, u.email FROM users u WHERE u.id = user_id; END; $$ LANGUAGE plpgsql;
-- Function with default parameters CREATE OR REPLACE FUNCTION get_users_by_status( user_status VARCHAR DEFAULT 'active', limit_count INTEGER DEFAULT 10 ) RETURNS TABLE(id INTEGER, username VARCHAR, status VARCHAR) AS $$ BEGIN RETURN QUERY SELECT u.id, u.username, u.status FROM users u WHERE u.status = user_status LIMIT limit_count; END; $$ LANGUAGE plpgsql;
-- Function with OUT parameters CREATE OR REPLACE FUNCTION get_user_stats( OUT total_users INTEGER, OUT active_users INTEGER, OUT inactive_users INTEGER ) AS $$ BEGIN SELECT COUNT() INTO total_users FROM users; SELECT COUNT() INTO active_users FROM users WHERE is_active = TRUE; SELECT COUNT(*) INTO inactive_users FROM users WHERE is_active = FALSE; END; $$ LANGUAGE plpgsql;
-- Function with exception handling CREATE OR REPLACE FUNCTION safe_divide(a NUMERIC, b NUMERIC) RETURNS NUMERIC AS $$ BEGIN IF b = 0 THEN RAISE EXCEPTION 'Division by zero'; END IF; RETURN a / b; EXCEPTION WHEN division_by_zero THEN RAISE NOTICE 'Cannot divide by zero, returning NULL'; RETURN NULL; END; $$ LANGUAGE plpgsql; ```의 경우
회사 소개
```sql -- Simple procedure CREATE OR REPLACE PROCEDURE update_user_status( user_id INTEGER, new_status VARCHAR ) AS $$ BEGIN UPDATE users SET status = new_status WHERE id = user_id;
IF NOT FOUND THEN
RAISE EXCEPTION 'User with id % not found', user_id;
END IF;
COMMIT;
END; $$ LANGUAGE plpgsql;
-- Procedure with transaction control CREATE OR REPLACE PROCEDURE transfer_funds( from_account INTEGER, to_account INTEGER, amount DECIMAL ) AS $$ DECLARE from_balance DECIMAL; BEGIN -- Start transaction BEGIN -- Check balance SELECT balance INTO from_balance FROM accounts WHERE id = from_account FOR UPDATE;
IF from_balance < amount THEN
RAISE EXCEPTION 'Insufficient funds';
END IF;
-- Debit from source account
UPDATE accounts
SET balance = balance - amount
WHERE id = from_account;
-- Credit to destination account
UPDATE accounts
SET balance = balance + amount
WHERE id = to_account;
-- Log transaction
INSERT INTO transactions (from_account, to_account, amount, timestamp)
VALUES (from_account, to_account, amount, NOW());
COMMIT;
RAISE NOTICE 'Transfer completed successfully';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE EXCEPTION 'Transfer failed: %', SQLERRM;
END;
END; $$ LANGUAGE plpgsql;
-- Call procedures CALL update_user_status(1, 'inactive'); CALL transfer_funds(100, 200, 500.00); ```를 호출합니다.
기능 및 절차 관리
```sql -- List functions \df SELECT routine_name, routine_type FROM information_schema.routines WHERE routine_schema = 'public';
-- Show function definition \df+ function_name SELECT pg_get_functiondef(oid) FROM pg_proc WHERE proname = 'function_name';
-- Drop function DROP FUNCTION IF EXISTS get_user_count();
-- Drop procedure DROP PROCEDURE IF EXISTS update_user_status(INTEGER, VARCHAR);
-- Call function SELECT get_user_count(); SELECT * FROM get_user_by_id(1);
-- Call function with OUT parameters SELECT * FROM get_user_stats(); ```의 경우
트리거
Triggers 만들기
```sql -- Create trigger function CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql;
-- Create trigger CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_modified_column();
-- BEFORE INSERT trigger CREATE OR REPLACE FUNCTION before_user_insert() RETURNS TRIGGER AS $$ BEGIN NEW.created_at = NOW(); NEW.username = LOWER(NEW.username); RETURN NEW; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER before_user_insert_trigger BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION before_user_insert();
-- AFTER INSERT trigger CREATE OR REPLACE FUNCTION after_user_insert() RETURNS TRIGGER AS $$ BEGIN INSERT INTO user_audit (user_id, action, timestamp) VALUES (NEW.id, 'INSERT', NOW()); RETURN NEW; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER after_user_insert_trigger AFTER INSERT ON users FOR EACH ROW EXECUTE FUNCTION after_user_insert();
-- BEFORE UPDATE trigger with conditions CREATE OR REPLACE FUNCTION before_user_update() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW();
-- Check if email changed
IF NEW.email != OLD.email THEN
NEW.email_verified = FALSE;
END IF;
-- Prevent username changes
IF NEW.username != OLD.username THEN
RAISE EXCEPTION 'Username cannot be changed';
END IF;
RETURN NEW;
END; $$ LANGUAGE plpgsql;
CREATE TRIGGER before_user_update_trigger BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION before_user_update();
-- AFTER UPDATE trigger CREATE OR REPLACE FUNCTION after_user_update() RETURNS TRIGGER AS $$ BEGIN INSERT INTO user_audit (user_id, action, old_values, new_values, timestamp) VALUES ( NEW.id, 'UPDATE', row_to_json(OLD), row_to_json(NEW), NOW() ); RETURN NEW; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER after_user_update_trigger AFTER UPDATE ON users FOR EACH ROW EXECUTE FUNCTION after_user_update();
-- BEFORE DELETE trigger CREATE OR REPLACE FUNCTION before_user_delete() RETURNS TRIGGER AS $$ BEGIN -- Archive user before deletion INSERT INTO deleted_users (original_id, username, email, deleted_at) VALUES (OLD.id, OLD.username, OLD.email, NOW()); RETURN OLD; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER before_user_delete_trigger BEFORE DELETE ON users FOR EACH ROW EXECUTE FUNCTION before_user_delete(); ```로
고급 Triggers
카지노사이트
Triggers 관리
오프화이트
조회 및 Materialized 이름 *
공지사항
카지노사이트
자료 처리 이름 *
__CODE_BLOCK_49_로그
연락처
카지노사이트
Updatable 보기
```sql -- Create updatable view CREATE VIEW user_profiles AS SELECT id, username, email, first_name, last_name FROM users WHERE is_active = TRUE;
-- Insert through view INSERT INTO user_profiles (username, email, first_name, last_name) VALUES ('newuser', 'new@example.com', 'New', 'User');
-- Update through view UPDATE user_profiles SET email = 'updated@example.com' WHERE id = 1;
-- Delete through view DELETE FROM user_profiles WHERE id = 1;
-- View with INSTEAD OF triggers for complex updates CREATE OR REPLACE FUNCTION update_user_profile() RETURNS TRIGGER AS $$ BEGIN IF TG_OP = 'INSERT' THEN INSERT INTO users (username, email, first_name, last_name, is_active) VALUES (NEW.username, NEW.email, NEW.first_name, NEW.last_name, TRUE); RETURN NEW; ELSIF TG_OP = 'UPDATE' THEN UPDATE users SET username = NEW.username, email = NEW.email, first_name = NEW.first_name, last_name = NEW.last_name WHERE id = NEW.id; RETURN NEW; ELSIF TG_OP = 'DELETE' THEN UPDATE users SET is_active = FALSE WHERE id = OLD.id; RETURN OLD; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql;
CREATE TRIGGER user_profiles_trigger INSTEAD OF INSERT OR UPDATE OR DELETE ON user_profiles FOR EACH ROW EXECUTE FUNCTION update_user_profile(); ```를 호출합니다.
사용자 관리
사용자 및 역할 만들기
```sql -- Create user CREATE USER username WITH PASSWORD 'password';
-- Create user with options CREATE USER username WITH PASSWORD 'password' CREATEDB CREATEROLE LOGIN VALID UNTIL '2024-12-31';
-- Create role (cannot login by default) CREATE ROLE role_name;
-- Create role with login capability CREATE ROLE role_name WITH LOGIN PASSWORD 'password';
-- Create role with specific attributes CREATE ROLE app_role WITH NOLOGIN CREATEDB CREATEROLE CONNECTION LIMIT 10; ```의 경우
감옥
카지노사이트
역할 관리
카지노사이트
사용자 권한 관리
```sql -- Show current user SELECT current_user;
-- Show current role SELECT current_role;
-- Show user privileges \du SELECT * FROM pg_user; SELECT * FROM pg_roles;
-- Show table privileges \dp table_name SELECT grantee, privilege_type FROM information_schema.role_table_grants WHERE table_name = 'users';
-- Show database privileges SELECT datname, datacl FROM pg_database WHERE datname = 'mydatabase';
-- Revoke privileges REVOKE SELECT ON users FROM username; REVOKE ALL PRIVILEGES ON users FROM username; REVOKE CONNECT ON DATABASE mydatabase FROM username;
-- Change user password ALTER USER username WITH PASSWORD 'new_password';
-- Change user attributes ALTER USER username WITH CREATEDB; ALTER USER username WITH NOCREATEDB; ALTER USER username WITH CREATEROLE; ALTER USER username WITH NOCREATEROLE;
-- Set connection limit ALTER USER username WITH CONNECTION LIMIT 5;
-- Set password expiration ALTER USER username WITH VALID UNTIL '2024-12-31';
-- Lock user account ALTER USER username WITH NOLOGIN;
-- Unlock user account ALTER USER username WITH LOGIN;
-- Drop user DROP USER username;
-- Drop role DROP ROLE role_name; ```로
행 레벨 보안 (RLS)
카지노사이트
백업 및 복원
사이트맵 지원하다
카지노사이트
백업에서 복원
카지노사이트
Point-in-Time 복구 (PITR)
```sql -- Enable WAL archiving (in postgresql.conf) -- wal_level = replica -- archive_mode = on -- archive_command = 'cp %p /path/to/archive/%f'
-- Create base backup SELECT pg_start_backup('backup_label'); -- Copy data directory SELECT pg_stop_backup();
-- Or use pg_basebackup ```에
```bash
Create base backup using pg_basebackup
pg_basebackup -U username -h hostname -D /backup/base -Ft -z -P
Point-in-time recovery
1. Stop PostgreSQL
2. Replace data directory with base backup
3. Create recovery.conf
4. Start PostgreSQL
recovery.conf example
restore_command = 'cp /path/to/archive/%f %p' recovery_target_time = '2023-12-25 14:30:00' ```의 경우
지속적인 Archiving
카지노사이트
성능 최적화
Query 최적화
카지노사이트
Index 최적화
```sql -- Analyze table statistics ANALYZE users;
-- Update all table statistics ANALYZE;
-- Check index usage SELECT schemaname, tablename, indexname, idx_tup_read, idx_tup_fetch, idx_scan FROM pg_stat_user_indexes ORDER BY idx_scan DESC;
-- Find unused indexes SELECT schemaname, tablename, indexname, idx_scan, pg_size_pretty(pg_relation_size(indexrelid)) as size FROM pg_stat_user_indexes WHERE idx_scan = 0 ORDER BY pg_relation_size(indexrelid) DESC;
-- Check index bloat SELECT schemaname, tablename, indexname, pg_size_pretty(pg_relation_size(indexrelid)) as size, CASE WHEN pg_relation_size(indexrelid) = 0 THEN 0 ELSE (pgstatindex(indexrelid)).avg_leaf_density END as avg_leaf_density FROM pg_stat_user_indexes;
-- Reindex to reduce bloat REINDEX INDEX idx_users_username; REINDEX TABLE users; REINDEX DATABASE mydatabase;
-- Create covering indexes CREATE INDEX idx_users_covering ON users(username) INCLUDE (email, created_at); ```의 경우
구성 최적화
카지노사이트
성능 모니터링
카지노사이트
진공 및 유지 보수
카지노사이트
이름 *
Replication 설정 스트리밍
카지노사이트
카지노사이트
모니터링
카지노사이트
논리 복제 (PostgreSQL 10 +)
```sql -- On publisher: Create publication CREATE PUBLICATION my_publication FOR ALL TABLES; -- Or for specific tables CREATE PUBLICATION my_publication FOR TABLE users, posts;
-- On subscriber: Create subscription CREATE SUBSCRIPTION my_subscription CONNECTION 'host=publisher_ip port=5432 user=replication_user password=password dbname=mydatabase' PUBLICATION my_publication;
-- Monitor logical replication SELECT * FROM pg_publication; SELECT * FROM pg_subscription; SELECT * FROM pg_stat_subscription;
-- Add table to publication ALTER PUBLICATION my_publication ADD TABLE new_table;
-- Remove table from publication ALTER PUBLICATION my_publication DROP TABLE old_table;
-- Refresh subscription ALTER SUBSCRIPTION my_subscription REFRESH PUBLICATION;
-- Drop subscription DROP SUBSCRIPTION my_subscription;
-- Drop publication DROP PUBLICATION my_publication; ```의 경우
실패 및 전환
카지노사이트
제품정보
설치 확장
```sql -- List available extensions SELECT * FROM pg_available_extensions ORDER BY name;
-- List installed extensions \dx SELECT * FROM pg_extension;
-- Install extension CREATE EXTENSION IF NOT EXISTS extension_name;
-- Install extension in specific schema CREATE EXTENSION extension_name SCHEMA schema_name;
-- Update extension ALTER EXTENSION extension_name UPDATE;
-- Drop extension DROP EXTENSION extension_name; ```의 경우
인기 상품
카지노사이트
확장 사용
```sql -- hstore examples CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100), attributes HSTORE );
INSERT INTO products (name, attributes) VALUES ('Laptop', 'brand=>Dell, ram=>16GB, storage=>512GB SSD');
SELECT name, attributes->'brand' as brand FROM products; SELECT * FROM products WHERE attributes @> 'brand=>Dell';
-- ltree examples (hierarchical data) CREATE TABLE categories ( id SERIAL PRIMARY KEY, path LTREE, name VARCHAR(100) );
INSERT INTO categories (path, name) VALUES ('electronics', 'Electronics'), ('electronics.computers', 'Computers'), ('electronics.computers.laptops', 'Laptops');
SELECT * FROM categories WHERE path ~ '.computers.'; SELECT * FROM categories WHERE path <@ 'electronics';
-- citext examples (case-insensitive text) CREATE TABLE users_ci ( id SERIAL PRIMARY KEY, username CITEXT UNIQUE, email CITEXT );
INSERT INTO users_ci (username, email) VALUES ('JohnDoe', 'JOHN@EXAMPLE.COM');
SELECT * FROM users_ci WHERE username = 'johndoe'; -- Case insensitive ```로
JSON 및 JSONB
JSON 대 JSONB
카지노사이트
JSON 작업
카지노사이트
JSON 기능
카지노사이트
JSON 인덱스
카지노사이트
JSON 검증
오프화이트
전체 텍스트 검색
기본 전체 텍스트 검색
ο 회원 관리
텍스트 검색 구성
```sql -- Show available text search configurations SELECT cfgname FROM pg_ts_config;
-- Show available dictionaries SELECT dictname FROM pg_ts_dict;
-- Show available parsers SELECT prsname FROM pg_ts_parser;
-- Create custom text search configuration CREATE TEXT SEARCH CONFIGURATION my_config (COPY = english);
-- Modify configuration ALTER TEXT SEARCH CONFIGURATION my_config ALTER MAPPING FOR word WITH english_stem, simple;
-- Set default configuration SET default_text_search_config = 'my_config'; ```에 대하여
고급 텍스트 검색
__CODE_BLOCK_82_를
텍스트 검색 기능
카지노사이트
관련 기사
시스템 모니터링
```sql -- Current activity SELECT pid, usename, application_name, client_addr, state, query_start, now() - query_start as duration, query FROM pg_stat_activity WHERE state != 'idle' ORDER BY query_start;
-- Database statistics SELECT datname, numbackends, xact_commit, xact_rollback, blks_read, blks_hit, tup_returned, tup_fetched, tup_inserted, tup_updated, tup_deleted FROM pg_stat_database;
-- Table statistics SELECT schemaname, tablename, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_live_tup, n_dead_tup FROM pg_stat_user_tables ORDER BY seq_scan DESC;
-- Index statistics SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes ORDER BY idx_scan DESC; ```에
성능 모니터링
__CODE_BLOCK_85_로그인
Resource 모니터링
카지노사이트
자동화된 모니터링 스크립트
카지노사이트
최고의 연습
Database 설계
```sql -- Use appropriate data types -- Bad: Using TEXT for everything CREATE TABLE bad_design ( id TEXT, age TEXT, price TEXT, is_active TEXT );
-- Good: Specific data types CREATE TABLE good_design ( id SERIAL PRIMARY KEY, age SMALLINT CHECK (age >= 0 AND age <= 150), price DECIMAL(10,2) CHECK (price >= 0), is_active BOOLEAN DEFAULT TRUE );
-- Normalize your database -- Avoid redundant data -- Use foreign keys to maintain referential integrity
-- Use meaningful names -- Bad CREATE TABLE u ( i INTEGER, n VARCHAR(50), e VARCHAR(100) );
-- Good CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE );
-- Add appropriate constraints ALTER TABLE posts ADD CONSTRAINT fk_posts_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
ALTER TABLE products ADD CONSTRAINT chk_products_price CHECK (price > 0);
-- Use partial indexes for filtered queries CREATE INDEX idx_active_users ON users(username) WHERE is_active = TRUE;
-- Use covering indexes to avoid table lookups CREATE INDEX idx_users_covering ON users(username) INCLUDE (email, created_at); ```에
Query 모범 사례
오프화이트
성과 모범 사례
```sql -- Regular maintenance ANALYZE; VACUUM; REINDEX DATABASE mydatabase;
-- Monitor query performance EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM users WHERE username = 'john_doe';
-- Use connection pooling in applications -- Configure appropriate connection limits
-- Partition large tables CREATE TABLE sales ( id SERIAL, sale_date DATE, amount DECIMAL(10,2) ) PARTITION BY RANGE (sale_date);
CREATE TABLE sales_2023 PARTITION OF sales FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
-- Use read replicas for read-heavy workloads -- Separate read and write operations
-- Configure autovacuum appropriately ALTER TABLE large_table SET ( autovacuum_vacuum_scale_factor = 0.1, autovacuum_analyze_scale_factor = 0.05 );
-- Use materialized views for expensive queries CREATE MATERIALIZED VIEW user_summary AS SELECT DATE_TRUNC('month', created_at) as month, COUNT(*) as user_count FROM users GROUP BY DATE_TRUNC('month', created_at);
-- Refresh materialized views regularly REFRESH MATERIALIZED VIEW user_summary; ```의 경우
보안 모범 사례
```sql -- Use least privilege principle -- Grant only necessary permissions GRANT SELECT, INSERT, UPDATE ON users TO app_user;
-- Use row level security ALTER TABLE users ENABLE ROW LEVEL SECURITY;
CREATE POLICY user_policy ON users FOR ALL TO app_role USING (user_id = current_setting('app.current_user_id')::INTEGER);
-- Use SSL connections -- Configure pg_hba.conf to require SSL -- hostssl all all 0.0.0.0/0 md5
-- Encrypt sensitive data CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- Hash passwords INSERT INTO users (username, password_hash) VALUES ('john', crypt('password', gen_salt('bf')));
-- Validate passwords SELECT * FROM users WHERE username = 'john' AND password_hash = crypt('password', password_hash);
-- Use audit logging CREATE TABLE audit_log ( id SERIAL PRIMARY KEY, table_name VARCHAR(50), operation VARCHAR(10), user_name VARCHAR(50), timestamp TIMESTAMP DEFAULT NOW(), old_values JSONB, new_values JSONB );
-- Regular security updates -- Monitor for suspicious activity -- Backup encryption keys securely ```를 호출합니다.
백업 모범 사례
__CODE_BLOCK_92_로그인
제품정보
PostgreSQL은 우수한 성능, 신뢰성 및 확장성을 제공하는 고급 기능 풍부한 관계 데이터베이스 시스템입니다. 이 포괄적 인 속임수 시트는 기본 설치에서 기본 설치부터 고급 주제로 복제, 전체 텍스트 검색 및 성능 최적화와 같은 필수 PostgreSQL 작업을 다룹니다.
** 키 강도: - ACID 준수 : 강력한 일관성을 가진 가득 차있는 거래 지원 - ** 예외 : 풍부한 확장 생태계 및 사용자 정의 데이터 유형 - ** 고급 기능: JSON/JSONB, 전체 텍스트 검색, 창 기능, CTE - Performance**: 정교한 쿼리 플래너 및 최적화 기능 - ** 표준 준수 ** : 우수한 SQL 표준 준수
** 최고의 사용 사례:** - 고급 SQL 기능을 필요로 하는 복잡한 웹 신청 - Data warehousing 및 분석 응용 - Geospatial 신청 (PostGIS 연장에) - JSON 문서 저장을 요구하는 응용 - 복잡한 사업 논리를 가진 기업 신청
** 중요 고려 사항 : ** - 일반 유지 보수 (VACUUM, ANALYZE)는 최적의 성능을 위해 중요합니다. - Proper indexing 전략은 쿼리 성능에 필수적입니다. - 구성 조정은 workload 특성에 근거해야 합니다 - 모니터링 및 경고는 생산 시스템에서 구현되어야 합니다.
이 속임수 시트에 명시된 관행과 기법을 따르면 효과적으로 설계, 구현, 유지하고 안전하고 실행되는 PostgreSQL 데이터베이스를 유지하고 응용 프로그램의 규모를 위해 신뢰할 수 있습니다.
<문서> 기능 copyToClipboard () 이름 * const 명령어 = document.querySelectorAll('code'); let allCommands = ''; 명령. forEach(cmd =>의 경우 모든Commands +=cmd.textContent + navigator.clipboard.write텍스(allCommands); alert('모든 명령은 클립보드에 복사!'); 이름 *
함수 생성PDF() { 창. 인쇄 (); 이름 *