PostgreSql 初始化完成后,在 PGDATA 下生成 postgresql.conf 配置文件,在不做任何更改的情況下,數(shù)據(jù)庫初始化完成后,就可以順利啟動,查看該配置文件可發(fā)現(xiàn),絕大多數(shù)配置參數(shù)都被注釋掉了,它們默認被內(nèi)置到了數(shù)據(jù)庫中,僅剩下幾個參數(shù)沒有被注釋掉,被系統(tǒng)重寫了(數(shù)據(jù)庫版本不同,重寫參數(shù)可能不同),如 pg 12.4 中被重寫的了如下幾個參數(shù)。測試環(huán)境使用可以采用默認參數(shù),但在生產(chǎn)中使用就需要對默認參數(shù)進行一些優(yōu)化配置了,參考了阿里云最佳實驗和 pg 官方手冊學習整理了生產(chǎn)環(huán)境中可使用的配置。
一、配置文件位置
1、一般放置在安裝時指定的數(shù)據(jù)目錄中,如果想修改,可通過 postgresql.conf 配置文件指定
data_directory = '/mnt/data/postgresdb/data' # use data in another directory
#hba_file = 'ConfigDir/pg_hba.conf' # host-based authentication file
#ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
二、配置文件用途
1、postgresql 系統(tǒng)可通過手動配置的文件分為3部分
主服務(wù)器配置文件:postgresql.conf
基于主機認證配置文件:pg_hba.conf
用于用戶名稱映射的配置文件:pg_ident.conf
三、配置文件詳解
以下是對默認配置文件內(nèi)容進行解釋,內(nèi)容參考官方文檔說明,后續(xù)也會給出用于生產(chǎn)的配置文件實例。
1、postgresql.conf
1.1、連接和認證
listen_addresses = '*' #監(jiān)聽客戶端連接
port = 5432 # 端口配置
max_connections = 1000 # 允許數(shù)據(jù)庫的最大并發(fā)連接數(shù),默認100
#superuser_reserved_connections = 3 # 預(yù)留給超級用戶的連接池數(shù),默認3
#unix_socket_directories = '/tmp' # 用于監(jiān)聽來自客戶端連接的 Unix 域套接字目錄
#unix_socket_group = '' # Unix域套接字所屬組
#unix_socket_permissions = 0777 # Unix 域套接字的訪問權(quán)限
#tcp_keepalives_idle = 0 # 在操作系統(tǒng)向客戶端發(fā)送一個TCP keepalive消息后無網(wǎng)絡(luò)活動的時間總量。 如果指定值時沒有單位,則以秒為單位。值0(默認值)表示選擇操作系統(tǒng)默認值
#tcp_keepalives_interval = 0 # 未被客戶端確認收到的TCP keepalive消息應(yīng)重新傳輸?shù)臅r間長度。 如果指定值時沒有單位,則以秒為單位。值0(默認值)表示選擇操作系統(tǒng)默認值
#tcp_keepalives_count = 0 # 服務(wù)器到客戶端的連接被認為中斷之前可以丟失的TCP keepalive消息的數(shù)量。值0(默認值)表示選擇操作系統(tǒng)默認值
#authentication_timeout = 1min # 認證超時,取 1s-600s
#ssl = off # 是否啟用ssl 連接,默認關(guān)閉
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' #允許使用的ssl 加密套件,如:
HIGH : AES, Camellia, 3DES
MEDIUM:RC4, SEED
+3DES:3DES
!aNULL:禁用不做認證的匿名密碼組
#ssl_prefer_server_ciphers = on # 是否首選服務(wù)端的SSL認證
#ssl_ecdh_curve = 'prime256v1' # 指定用在ECDH密鑰交換中的曲線名稱,需要客戶端支持。
#ssl_dh_params_file = '' #含有用于SSL密碼的所謂臨時DH家族的Diffie-Hellman參數(shù)的文件名。默認值為空。
#ssl_cert_file = 'server.crt' #服務(wù)器證書文件名
#ssl_key_file = 'server.key' #服務(wù)器私鑰文件名
#ssl_ca_file = '' #服務(wù)器證書頒發(fā)機構(gòu)的文件名
#ssl_crl_file = '' #服務(wù)器證書的文件名
#password_encryption = md5 #密碼加密算法, md5 or scram-sha-256
#db_user_namespace = off #啟用針對每個數(shù)據(jù)庫的用戶名
#row_security = on # 行安全策略
#krb_server_keyfile = '' #Kerberos服務(wù)器密鑰文件的位置
#krb_caseins_users = off #是否應(yīng)該以大小寫不敏感的方式對待GSSAPI用戶名,默認為大小寫敏感。
1.2、資源配置
shared_buffers = 256MB # 共享內(nèi)存緩存區(qū)大小,最小 128kB, 默認128MB
#huge_pages = try # 是否為主共享內(nèi)存區(qū)域請求巨型頁,try:嘗試,即使失敗不影響服務(wù)器啟動;on:請求,如果失敗影響服務(wù)器啟動;off:不請求
#temp_buffers = 8MB # 設(shè)置會話的臨時緩沖區(qū)大小,最小 800kB
#max_prepared_transactions = 0 # 同時處于準備狀態(tài)的事務(wù)最大數(shù)目,默認為0,即 禁用
work_mem = 512MB #寫入臨時磁盤文件前的查詢操作可使用的內(nèi)存, min 64kB
#maintenance_work_mem = 512MB # 指定創(chuàng)建索引或修改外鍵時,使用的最大內(nèi)存,min 1MB
#replacement_sort_tuples = 150000 # 允許默認的排序策略使用的CPU緩存
#autovacuum_work_mem = -1 # 指定每個自動清理工作進程使用的最大內(nèi)存量,默認-1 表示使用maintenance_work_mem 的配置
#max_stack_depth = 2MB # 服務(wù)器執(zhí)行堆棧的最大安全深度, min 100kB
dynamic_shared_memory_type = posix # 動態(tài)共享內(nèi)存實現(xiàn)
可選項:
# posix(用于使用shm_open分配的posix共享內(nèi)存)
# sysv(用于通過shmget分配的System V共享內(nèi)存)
# windows(用于windows共享內(nèi)存)、
# mmap(用于使用存儲在數(shù)據(jù)目錄中的內(nèi)存映射文件模擬共享內(nèi)存)
# none(用于禁用此特性)
#temp_file_limit = -1 #用于臨時文件的最大磁盤量,默認-1 沒有限制
#max_files_per_process = 1000 #每個子進程允許同時打開的最大文件數(shù),默認1000,min 25
shared_preload_libraries = 'pg_stat_statements' # 預(yù)加載的共享庫,用于統(tǒng)計數(shù)據(jù)庫的資源開銷
pg_stat_statements.max = 10000 #允許保留多少條統(tǒng)計信息
pg_stat_statements.track = all #all - (所有SQL包括函數(shù)內(nèi)嵌套的SQL), top - 直接執(zhí)行的SQL(函數(shù)內(nèi)的sql不被跟蹤), none - (不跟蹤)
#vacuum_cost_delay = 0 # 超過開銷限制時,進程休眠的時間,0-100 milliseconds,默認禁用
#vacuum_cost_page_hit = 1 #清理一個在共享緩存中找到的緩沖區(qū)的估計代價。它表示鎖住緩沖池、查找共享哈希表和掃描頁內(nèi)容的代價。默認值為1。 0-10000 credits
#vacuum_cost_page_miss = 10 # 清理一個必須從磁盤上讀取的緩沖區(qū)的代價。它表示鎖住緩沖池、查找共享哈希表、從磁盤讀取需要的塊以及掃描其內(nèi)容的代價。默認值為10。0-10000 credits
#vacuum_cost_page_dirty = 20 # 當清理修改一個之前干凈的塊時需要花費的估計代價。它表示再次把臟塊刷出到磁盤所需要的額外I/O。默認值為20。0-10000 credits
#vacuum_cost_limit = 200 # 將導致清理進程休眠的累計代價。默認值為200。1-10000 credits
#bgwriter_delay = 200ms # 指定后臺寫入器活動輪次之間的延遲
#bgwriter_lru_maxpages = 100 # 每個輪次中不超過多少個緩存區(qū)
#bgwriter_lru_multiplier = 2.0 # 基數(shù),最近一輪寫緩沖區(qū)的個數(shù)乘以這個值,估算下一輪
#bgwriter_flush_after = 512kB # 超過大小后,嘗試強制 把這些寫發(fā)送到底層存儲上
#effective_io_concurrency = 1 # 并發(fā)IO的數(shù)量,1-1000; 0 disables prefetching
#max_worker_processes = 8 # 后臺進程的最大數(shù)
#max_parallel_workers_per_gather = 2 # 單個節(jié)點開始的最大worker 數(shù)量
#max_parallel_workers = 8 # 支持的最大worker數(shù)量
#old_snapshot_threshold = -1 #可以使用且沒有發(fā)生錯誤的最小快照時間 1min-60d; -1 禁用; 0 is immediate
#backend_flush_after = 0 # 只要一個寫入的數(shù)據(jù)量超過,就強制寫入底層存儲, 0禁用
1.3、預(yù)寫式日志 (Write-Ahead Logging)
wal_level = replica # 級別,字面意思,minimal, replica, or logical
fsync = off # 嘗試確保更新被物理地寫入到磁盤
#synchronous_commit = on # 級別,數(shù)據(jù)庫服務(wù)器返回“success”指示給客戶端之前,必須要完成多少WAL處理,remote_apply, on(默認值), remote_write,local, 和 off
#wal_sync_method = fsync # 強制 WAL 更新到磁盤的方法
# open_datasync 用open()選項O_DSYNC寫 WAL 文件
# fdatasync (default on Linux) 每次提交時調(diào)用
# fsync 每次提交時調(diào)用
# fsync_writethrough 每次提交時調(diào)用fsync(),強制任何磁盤寫高速緩存的直通寫
# open_sync 用open()選項O_SYNC寫 WAL 文件
#full_page_writes = on # 從一個檢測點的頁面的第一次修改期間將每個頁面的全部內(nèi)容寫到 WAL 中
#wal_compression = off # 允許壓縮
#wal_log_hints = off # 檢查點之后頁面首次修改期間把該磁盤頁面的整個內(nèi)容都寫入 WAL
#wal_buffers = -1 # 還未寫入磁盤的共享緩沖區(qū)大小 min 32kB, -1 sets based on shared_buffers
#wal_writer_delay = 200ms #寫入刷新頻率,時間維度 1-10000 milliseconds
#wal_writer_flush_after = 1MB #寫入刷新頻率,大小維度 measured in pages, 0 disables
#commit_delay = 0 # 寫入前的時間延遲,range 0-100000, in microseconds
#commit_siblings = 5 #執(zhí)行延遲時,并發(fā)事務(wù)的最小數(shù)量, range 1-1000
checkpoint_timeout = 5min #檢查間隔 range 30s-1d
max_wal_size = 1GB #2個檢查點之間,允許增長的最大數(shù)量
#min_wal_size = 80MB # 和上類似
#checkpoint_completion_target = 0.5 # 指定檢查點需要完成的目標, 0.0 - 1.0
#checkpoint_flush_after = 256kB # 當執(zhí)行檢查點時,超過這個數(shù)量會強制寫到底層存儲, 0 disables
#checkpoint_warning = 30s #檢查點低于該值,寫日志, 0 disables
archive_mode = on # 歸檔; off, on, or always
archive_command = 'cp %p /mnt/data/pgbackup/pgarchive/%f' # 歸檔的目錄
# placeholders: %p = 歸檔的文件目錄
# %f = 歸檔的文件名
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
#archive_timeout = 0 # 歸檔的時間間隔, 0 disables
1.4、復制
max_wal_senders = 2 # 備份客戶端的最大并發(fā),發(fā)送服務(wù)器
wal_keep_segments = 64 # 為備份客戶端保留的段大小, 16MB each; 0 disables
wal_sender_timeout = 60s # 發(fā)送超時; 0 disables
#max_replication_slots = 10 # 支持的最大復制槽數(shù)
#track_commit_timestamp = off # 記錄事務(wù)的提交時間
#synchronous_standby_names = '' # 同步復制的機器列表; '*' = all
#vacuum_defer_cleanup_age = 0 # 更新在清理死亡版本前的延遲
#hot_standby = on # 恢復期間,是否允許連接查詢
#max_standby_archive_delay = 30s #并發(fā)沖突間隔(歸檔時)
#max_standby_streaming_delay = 30s # 并發(fā)沖突間隔(流式復制時)
#wal_receiver_status_interval = 10s # 備份機器發(fā)送狀態(tài)間隔
#hot_standby_feedback = off # 發(fā)送當前備份機器的查詢反饋
#wal_receiver_timeout = 60s # 復制連接的響應(yīng)超時
#wal_retrieve_retry_interval = 5s # 復制連接的等待超時
#max_logical_replication_workers = 4 # 復制worker的最大數(shù)量
#max_sync_workers_per_subscription = 2 # 訂閱worker的最大數(shù)量
1.5、查詢規(guī)劃
#enable_bitmapscan = on #是否允許查詢使用位圖掃描
#enable_hashagg = on #是否允許查詢使用hash聚合
#enable_hashjoin = on #是否允許查詢使用hash連接
#enable_indexscan = on #是否允許查詢使用索引掃描
#enable_indexonlyscan = on #是否允許查詢只使用索引掃描
#enable_mergejoin = on #是否允許查詢使用歸并連接
#enable_nestloop = on #是否允許查詢使用嵌套循環(huán)
#enable_seqscan = on #是否允許查詢使用順序掃描
#enable_sort = on #是否允許查詢使用顯示排序
# - Planner Cost Constants -
#seq_page_cost = 1.0 # 計算一次順序磁盤頁面的開銷
#random_page_cost = 4.0 #計算一次非順序磁盤頁面的開銷
#cpu_tuple_cost = 0.01 # 處理每一行的cpu 開銷
#cpu_index_tuple_cost = 0.005 # 處理每一個索引項的CPU開銷
#cpu_operator_cost = 0.0025 # 處理每一個操作符或函數(shù)的CPU開銷
#parallel_tuple_cost = 0.1 # 從一個進程傳遞一個元組給另一個進程的開銷
#parallel_setup_cost = 1000.0 # 并行進程的開銷
#min_parallel_table_scan_size = 8MB #最小并行掃描的數(shù)據(jù)量
#min_parallel_index_scan_size = 512kB #最小并行掃描的索引量
#effective_cache_size = 4GB #單一查詢緩沖區(qū)大小
1.6、錯誤和日志
#log_destination = 'stderr' # 多種日志記錄方式
# stderr, csvlog, syslog, and eventlog,
#logging_collector = off # 日志收集器
#log_directory = 'log' # 日志目錄
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 文件名
#log_file_mode = 0600 # 日志文件權(quán)限
#log_truncate_on_rotation = off #日志截斷
#log_rotation_age = 1d # 單一日志的周期
#log_rotation_size = 10MB # 單一日志的大小
#syslog_facility = 'LOCAL0' #是否向syslog寫日志
#syslog_ident = 'postgres' #程序名
#syslog_sequence_numbers = on #日志前綴
#syslog_split_messages = on #日志分割
#event_source = 'PostgreSQL' #日志程序名
#client_min_messages = notice # 連接客戶端的日志級別
# debug1-5、log、 notice、warning、 error
#log_min_messages = warning # 日志級別
# debug1-5、 info、notice、warning、 error、log、 fatal、 panic
#log_min_error_statement = error # 錯誤SQL 級別
# debug 1-5、 info、notice、warning、error、log、fatal、panic (effectively off)
#log_min_duration_statement = -1 # 語句執(zhí)行的持續(xù)時間,-1 is disabled, 0 logs all statements
# and their durations, > 0 logs only
# 調(diào)試輸出
#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
#觸發(fā)輸出
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default # terse, default, or verbose messages
#log_hostname = off
#log_line_prefix = '%m [%p] ' # special values:
# %a = application name
# %u = user name
# %d = database name
# %r = remote host and port
# %h = remote host
# %p = process ID
# %t = timestamp without milliseconds
# %m = timestamp with milliseconds
# %n = timestamp with milliseconds (as a Unix epoch)
# %i = command tag
# %e = SQL state
# %c = session ID
# %l = session line number
# %s = session start timestamp
# %v = virtual transaction ID
# %x = transaction ID (0 if none)
# %q = stop here in non-session
# processes
# %% = '%'
# e.g. '<%u%%%d> '
#log_lock_waits = off # log lock waits >= deadlock_timeout
#log_statement = 'none' # none, ddl, mod, all
#log_replication_commands = off
#log_temp_files = -1 # log temporary files equal or larger
# than the specified size in kilobytes;
# -1 disables, 0 logs all temp files
log_timezone = 'PRC' #中國時區(qū)
# - Process Title -
#cluster_name = '' # 進程標題
#update_process_title = on #啟動進程標題更新
1.7、統(tǒng)計數(shù)據(jù)
# - 查詢和索引命令統(tǒng)計收集
#track_activities = on #每個回話的執(zhí)行命令和時間
#track_counts = on
#track_io_timing = off
#track_functions = none # none, pl, all 跟蹤函數(shù)調(diào)用
#track_activity_query_size = 1024 # 統(tǒng)計每個查詢的內(nèi)存量
#stats_temp_directory = 'pg_stat_tmp' #統(tǒng)計的緩存目錄
# - 統(tǒng)計監(jiān)控,對每個查詢,向服務(wù)器日志里輸出相應(yīng)模塊的性能統(tǒng)計
#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
#log_statement_stats = off
1.8、自動清理
#autovacuum = on # 是否開啟自動清理,依賴track_count
#log_autovacuum_min_duration = -1 # 是否記錄自動清理動作
#autovacuum_max_workers = 3 # 自動清理的最大worker 數(shù)量
#autovacuum_naptime = 1min # 運行的最小延遲
#autovacuum_vacuum_threshold = 50 # 在表上被觸發(fā)的清理的更新或修改的元組數(shù)據(jù)量
#autovacuum_analyze_threshold = 50 # 在表上被觸發(fā)的分析的更新或修改的元組數(shù)據(jù)量
#autovacuum_vacuum_scale_factor = 0.2 # 指定表分數(shù),決定是否觸發(fā)vacuum
#autovacuum_analyze_scale_factor = 0.1 # 指定表分數(shù),決定是否觸發(fā)analyze
#autovacuum_freeze_max_age = 200000000 #觸發(fā)vacuum事務(wù)前的最大年齡
#autovacuum_multixact_freeze_max_age = 400000000 #觸發(fā)vacuum多事務(wù)前的最大年齡
#autovacuum_vacuum_cost_delay = 20ms # 延遲
#autovacuum_vacuum_cost_limit = -1 #限制值
1.9、客戶端連接
#search_path = '"$user", public' # 搜索對象的模式順序
#default_tablespace = '' # 默認表空間
#temp_tablespaces = '' # 緩存表空間
#check_function_bodies = on #是否開啟對函數(shù)體字符串的驗證
#default_transaction_isolation = 'read committed' #事務(wù)的隔離級別
#default_transaction_read_only = off #控制每個新事務(wù)的默認只讀狀態(tài)
#default_transaction_deferrable = off #控制可延遲事務(wù)的延遲
#session_replication_role = 'origin' #控制觸發(fā)器的觸發(fā)
#statement_timeout = 0 # 執(zhí)行超時
#lock_timeout = 0 # 鎖超時
#idle_in_transaction_session_timeout = 0 # 閑置事務(wù)超時
#vacuum_freeze_min_age = 50000000 #觸發(fā)vacuum 的最小年齡
#vacuum_freeze_table_age = 150000000
#vacuum_multixact_freeze_min_age = 5000000
#vacuum_multixact_freeze_table_age = 150000000
#bytea_output = 'hex' # hex, escape 輸出格式
#xmlbinary = 'base64' #二進制編碼格式
#xmloption = 'content' #轉(zhuǎn)換格式
# - Locale and Formatting -
datestyle = 'iso, mdy' #日期時間的顯示格式
#intervalstyle = 'postgres' #間隔值得顯示格式
timezone = 'PRC' #時區(qū)
#timezone_abbreviations = 'Default' # 設(shè)置服務(wù)器接受的日期時間輸入中使用的時區(qū)縮寫集合
#extra_float_digits = 0 # 文本輸出浮點值得位數(shù),min -15, max 3
#client_encoding = sql_ascii # 客戶端字符集
lc_messages = 'en_US.UTF-8' # 消息語言
lc_monetary = 'en_US.UTF-8' # 貨幣
lc_numeric = 'en_US.UTF-8' #數(shù)字
lc_time = 'en_US.UTF-8' # 時間
default_text_search_config = 'pg_catalog.english' #默認文本搜索配置
# - Other Defaults -
#dynamic_library_path = '$libdir' #動態(tài)共享庫地址
#local_preload_libraries = ''
#session_preload_libraries = ''
1.10、鎖管理
#deadlock_timeout = 1s #死鎖超時
#max_locks_per_transaction = 64 # 共享鎖在表上的數(shù)量,min 10
#max_pred_locks_per_transaction = 64 # 共享謂詞鎖在表上的數(shù)量,min 10
#max_pred_locks_per_relation = -2 # 單個關(guān)系上能夠鎖多少頁
#max_pred_locks_per_page = 2 # 單一頁面上能夠鎖住多少行,min 0
1.11、錯誤處理
#exit_on_error = off # 會話終止
#restart_after_crash = on # 后端崩潰后自動重新初始化
1.12、配置加載
#include_dir = 'conf.d' # 加載配置文件目錄
#include_if_exists = 'exists.conf' # 如果文件存在,加載配置文件
#include = 'special.conf' # 加載配置文件
2、pg_hba.conf
該文件用于控制客戶端認證。每條記錄指定一種連接類型、一個客戶端 IP 地址范圍(如果和連接類型相關(guān))、一個數(shù)據(jù)庫名、一個用戶名以及對匹配這些參數(shù)的連接使用的認證方法。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
#host all all 0.0.0.0/0 md5
host all all 0.0.0.0/0 trust
local:這條記錄匹配使用 Unix 域套接字的連接。 如果沒有這種類型的記錄,就不允許 Unix 域套接字連接。
host:這條記錄匹配使用 TCP/IP 建立的連接。 host記錄匹配SSL和非SSL的連接嘗試。
hostssl:這條記錄匹配使用 TCP/IP 建立的連接,但必須是使用SSL加密的連接。
hostnossl:只匹配那些在 TCP/IP上不使用SSL的連接。
hostgssenc、hostnogssenc: 同ssl 、nossl 類似。
database: 指定匹配的數(shù)據(jù)庫名稱
user: 指定匹配的數(shù)據(jù)庫用戶名
address: 指定匹配的客戶端IP
method : 指定認證方式。其中:
trust:無條件允許。
reject: 無條件拒絕。
md5、 scram-sha-256: 執(zhí)行加密認證口令。
peer:從操作系統(tǒng)獲得客戶端的操作系統(tǒng)用戶,并且檢查它是否匹配被請求的數(shù)據(jù)庫用戶名
ident:通過聯(lián)系客戶端的 ident 服務(wù)器獲取客戶端的操作系統(tǒng)名,并且檢查它是否匹配被請求的數(shù)據(jù)庫用戶名
password: 不加密認證口令。
ldap:使用LDAP服務(wù)器認證。
pam:使用操作系統(tǒng)提供的可插入認證模塊服務(wù)(PAM)認證。
3、pg_ident.conf
用戶名映射,當使用像 Ident 或者 GSSAPI 之類的外部認證系統(tǒng)時,發(fā)起連接的操作系統(tǒng)用戶名可能不同于要被使用的數(shù)據(jù)庫用戶(角色),此時可以使用用戶名映射。
格式如下:
map-name system-username database-username
其中,map-name是一個任意名稱,用于在pg_hba.conf中引用該映射。其他兩個一個是操作系統(tǒng)用戶名,一個是數(shù)據(jù)庫用戶名。相同的map-name可以被反復地用在同一個映射中指定多個用戶映射。
參考
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。