<mark id="n9zld"></mark>

      <thead id="n9zld"><video id="n9zld"></video></thead>

      <ins id="n9zld"></ins>

        <b id="n9zld"></b>

            <font id="n9zld"><video id="n9zld"></video></font>
            <b id="n9zld"></b>

              <dfn id="n9zld"><video id="n9zld"></video></dfn>

                PostgreSQL新手入門

                作者: 阮一峰

                日期: 2013年12月22日

                騰訊課堂 NEXT 學院

                自從MySQL被Oracle收購以后,PostgreSQL逐漸成為開源關系型數據庫的首選。

                本文介紹PostgreSQL的安裝和基本用法,供初次使用者上手。以下內容基于Debian操作系統,其他操作系統實在沒有精力兼顧,但是大部分內容應該普遍適用。

                postgresql

                一、安裝

                首先,安裝PostgreSQL客戶端。

                sudo apt-get install postgresql-client

                然后,安裝PostgreSQL服務器。

                sudo apt-get install postgresql

                正常情況下,安裝完成后,PostgreSQL服務器會自動在本機的5432端口開啟。

                如果還想安裝圖形管理界面,可以運行下面命令,但是本文不涉及這方面內容。

                sudo apt-get install pgadmin3

                二、添加新用戶和新數據庫

                初次安裝后,默認生成一個名為postgres的數據庫和一個名為postgres的數據庫用戶。這里需要注意的是,同時還生成了一個名為postgres的Linux系統用戶。

                下面,我們使用postgres用戶,來生成其他用戶和新數據庫。好幾種方法可以達到這個目的,這里介紹兩種。

                第一種方法,使用PostgreSQL控制臺。

                首先,新建一個Linux新用戶,可以取你想要的名字,這里為dbuser。

                sudo adduser dbuser

                然后,切換到postgres用戶。

                sudo su - postgres

                下一步,使用psql命令登錄PostgreSQL控制臺。

                psql

                這時相當于系統用戶postgres以同名數據庫用戶的身份,登錄數據庫,這是不用輸入密碼的。如果一切正常,系統提示符會變為"postgres=#",表示這時已經進入了數據庫控制臺。以下的命令都在控制臺內完成。

                第一件事是使用\password命令,為postgres用戶設置一個密碼。

                \password postgres

                第二件事是創建數據庫用戶dbuser(剛才創建的是Linux系統用戶),并設置密碼。

                CREATE USER dbuser WITH PASSWORD 'password';

                第三件事是創建用戶數據庫,這里為exampledb,并指定所有者為dbuser。

                CREATE DATABASE exampledb OWNER dbuser;

                第四件事是將exampledb數據庫的所有權限都賦予dbuser,否則dbuser只能登錄控制臺,沒有任何數據庫操作權限。

                GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;

                最后,使用\q命令退出控制臺(也可以直接按ctrl+D)。

                \q

                第二種方法,使用shell命令行。

                添加新用戶和新數據庫,除了在PostgreSQL控制臺內,還可以在shell命令行下完成。這是因為PostgreSQL提供了命令行程序createuser和createdb。還是以新建用戶dbuser和數據庫exampledb為例。

                首先,創建數據庫用戶dbuser,并指定其為超級用戶。

                sudo -u postgres createuser --superuser dbuser

                然后,登錄數據庫控制臺,設置dbuser用戶的密碼,完成后退出控制臺。

                sudo -u postgres psql

                \password dbuser

                \q

                接著,在shell命令行下,創建數據庫exampledb,并指定所有者為dbuser。

                sudo -u postgres createdb -O dbuser exampledb

                三、登錄數據庫

                添加新用戶和新數據庫以后,就要以新用戶的名義登錄數據庫,這時使用的是psql命令。

                psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432

                上面命令的參數含義如下:-U指定用戶,-d指定數據庫,-h指定服務器,-p指定端口。

                輸入上面命令以后,系統會提示輸入dbuser用戶的密碼。輸入正確,就可以登錄控制臺了。

                psql命令存在簡寫形式。如果當前Linux系統用戶,同時也是PostgreSQL用戶,則可以省略用戶名(-U參數的部分)。舉例來說,我的Linux系統用戶名為ruanyf,且PostgreSQL數據庫存在同名用戶,則我以ruanyf身份登錄Linux系統后,可以直接使用下面的命令登錄數據庫,且不需要密碼。

                psql exampledb

                此時,如果PostgreSQL內部還存在與當前系統用戶同名的數據庫,則連數據庫名都可以省略。比如,假定存在一個叫做ruanyf的數據庫,則直接鍵入psql就可以登錄該數據庫。

                psql

                另外,如果要恢復外部數據,可以使用下面的命令。

                psql exampledb < exampledb.sql

                四、控制臺命令

                除了前面已經用到的\password命令(設置密碼)和\q命令(退出)以外,控制臺還提供一系列其他命令。

                • \h:查看SQL命令的解釋,比如\h select。
                • \?:查看psql命令列表。
                • \l:列出所有數據庫。
                • \c [database_name]:連接其他數據庫。
                • \d:列出當前數據庫的所有表格。
                • \d [table_name]:列出某一張表格的結構。
                • \du:列出所有用戶。
                • \e:打開文本編輯器。
                • \conninfo:列出當前數據庫和連接的信息。

                五、數據庫操作

                基本的數據庫操作,就是使用一般的SQL語言。

                # 創建新表
                CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);

                # 插入數據
                INSERT INTO user_tbl(name, signup_date) VALUES('張三', '2013-12-22');

                # 選擇記錄
                SELECT * FROM user_tbl;

                # 更新數據
                UPDATE user_tbl set name = '李四' WHERE name = '張三';

                # 刪除記錄
                DELETE FROM user_tbl WHERE name = '李四' ;

                # 添加欄位
                ALTER TABLE user_tbl ADD email VARCHAR(40);

                # 更新結構
                ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;

                # 更名欄位
                ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;

                # 刪除欄位
                ALTER TABLE user_tbl DROP COLUMN email;

                # 表格更名
                ALTER TABLE user_tbl RENAME TO backup_tbl;

                # 刪除表格
                DROP TABLE IF EXISTS backup_tbl;

                (完)

                留言(46條)

                PostgreSQL要崛起啊,我們一直在用他了;MySQL要被Oracle買了再給滅了。

                Debian 現在默認安裝的數據庫已經是 postgres 了。

                能不能講一講mysql 被oracle收購了為什么有人認為它會衰落?因為oracle重點是oracle數據庫的原因嗎,這樣收購mysql難道是為了把mysql弄死不成?

                暑期參加oschina的開源源創會,阿里核心系統數據庫組的褚霸同學說如果回到08年,他會建議集團使用PostgreSQL,而不是MySQL.PostgreSQL誕生于學院派,沒有局限于當時的一些硬件條件,MySQL發展自程序員的業余作品,為當時的小內存小外存的硬件條件做了特殊的處理,隨著硬件的不斷發展,這些處理在現在看來倒成了一個缺點了;當然褚霸同學不僅僅說了這么一個點,我只是把印象最深的一點寫出來

                maria 呢?

                除了用法有點奇怪,還是很好的

                mariadb才是代替者吧,看看wikipedia

                MySQL和Postgresql的最大區別應該就是多線程和多進程設計的對決吧。雖然雙方的出發點不一樣,也各有優勢,但是個人覺得多進程相對于多線程來說,管理和通信方面要方便不少,理解上也更簡潔明了。

                沒有干貨!

                寫得很好,我也正想從mysql轉過來。

                有個 enterpriseDB 上面有打包好的 PostgreSQL 可以免費下,各個os下的都有。可以省去這樣的安裝了。

                PostgreSQL大名如雷貫耳,看來是大勢所趨了,有空得多看看。
                看了不少文章,頗有收獲,謝阮兄。

                寫得很好,感謝分享。

                pgsql 應該算是買對對象的數據庫

                試了好幾次,數據庫用戶都沒創建成功,最后發現是sql語句沒加分號...

                pg的歷史比mysql的長很多,在國外是很流行的,國內嘛,因為拿來主義的習慣,少人用,在數據量不大,連接數不多時,使用mysql是很好的選擇(其實我覺得對于小應用sqlite更好),但上規模時,例如同時有成百上千個連接時,mysql就疲態了,而pg基本都能適應。但pg畢竟是“學院派”數據庫,很多時候理論性強,甚至對一些基本的東西不做優化,例如count(*),可是會做全表掃描的,對于數百萬條記錄的表,這將消耗大量時間。
                如果你的是小應用,用sqlite吧,真的是又快又好,而且無處不在,HTML5,android等都內置了它,在計算機界就相當mdb(Access)于windows。而且性能很多時候比mdb要好。
                如果是大型應用,又不差錢,還是用商業數據庫吧,畢竟數據的價值和買數據庫軟件的錢比起來還是九牛一毛,如果又缺錢又要好,就用pg。對于互聯網應用,作為設計者,還應該考慮NoSQL數據庫,例如mongoDB,有點“對象關系”的意思,速度更快,數據庫可分布,數據結構靈活,不用像SQL數據庫一樣字斟句酌地設計表、關系、觸發器、過程等,應用端可以更靈活。

                可以裝上試試看,很多的開源程序在用postgresql做數據庫 這篇文章提供一個基本的入門足夠了,到真正用的時候再去查詢詳細用法。主要是開闊思路,開闊視野

                PgSQL火爆前的預告

                2013年最后一天,希望阮大哥能對這一年做個總結。2011和12年都錯過了,今年和大家分享一下感受吧。

                阮老師好!
                里面修改postgres用戶密碼時,應該使用passwd命令。文中是password。您檢查一下。

                引用D瓜哥的發言:

                修改postgres用戶密碼時,應該使用passwd命令。文中是password。您檢查一下。

                passwd是shell命令,這里是指postgresql內部的命令,\password沒錯。

                引用冰與火的發言:

                2013年最后一天,希望阮大哥能對這一年做個總結。2011和12年都錯過了,今年和大家分享一下感受吧。

                不好意思,不會有年度總結,至少今年不會。我有自己的苦衷,請諒解。

                不錯,希望能多寫一點分享一下

                FYI,debian/ubuntu 官方原裏版本一般比較老,postgres 官方維護了一個 apt 源 https://wiki.postgresql.org/wiki/Apt 一直在更新的,有 bugfix 一般都第一時間出來

                PostgreSQL 官網上面怎么沒找到redhat下面安裝說明?還是您寫的debian安裝說明通俗易懂

                引用fgh的發言:

                pg的歷史比mysql的長很多,在國外是很流行的,國內嘛,因為拿來主義的習慣,少人用,

                國內也有人在研究PG的。

                user_tbl 不知道為什么你的表明加下劃線,其實表名是沒有下劃線的
                還有我按照你的方法添加用戶和數據庫
                但是按照psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432 連接卻提示:
                FATAL: Ident authentication failed for user "dbuser"

                我也很喜歡Debian,博主什么寫個硬盤安裝的教程吧。

                創建表的時候表名是:usertbl
                為啥選擇表的時候變成了:user_tbl?

                @codeyu:

                剛發現,markdown自動把同一行的兩個下劃線,解釋為斜體。

                我一直搞不懂Linux用戶和數據庫用戶是什么關系。。。學習了

                引用陸贇的發言:

                MySQL和Postgresql的最大區別應該就是多線程和多進程設計的對決吧。雖然雙方的出發點不一樣,也各有優勢,但是個人覺得多進程相對于多線程來說,管理和通信方面要方便不少,理解上也更簡潔明了。

                多進程的優勢是可以把多核處理器跑滿

                引用fgh的發言:

                pg的歷史比mysql的長很多,在國外是很流行的,國內嘛,因為拿來主義的習慣,少人用,在數據量不大,連接數不多時,使用mysql是很好的選擇(其實我覺得對于小應用sqlite更好),但上規模時,例如同時有成百上千個連接時,mysql就疲態了,而pg基本都能適應。但pg畢竟是“學院派”數據庫,很多時候理論性強,甚至對一些基本的東西不做優化,例如count(*),可是會做全表掃描的,對于數百萬條記錄的表,這將消耗大量時間。
                如果你的是小應用,用sqlite吧,真的是又快又好,而且無處不在,HTML5,android等都內置了它,在計算機界就相當mdb(Access)于windows。而且性能很多時候比mdb要好。

                count(*)這個不是pg的問題,任何mvcc的數據庫在count(*)時都是掃全表的。 mysql之所以快是因為myisam引擎相當不嚴謹(ACID方面,不支持事務),它對表row總行數有個計數器。而mysql支持(準確說是部分支持)事務的innodb引擎做count(*)就是掃全表照樣滿了——我還不如用pgsql呢,mysql那垃圾explain優化基本就沒啥用,而pg的explain/explain analize信息非常有用

                PostgreSQL 的提示符不只 postgres=# 一種。
                不同的提示符,有不同的含義。
                參考:http://stackoverflow.com/questions/19668825/meaning-of-different-command-line-prompts-in-postgresql

                對我來說,這是很好的入門資料 謝謝了

                您好,我想問一下,
                我現在想在sql編輯器中使用腳本類修改連接的數據庫,就是和sql的USE[數據庫名]一樣的功能,
                該怎么實現?

                為什么要創建額外的系統用戶 dbuser?
                有時間,去看了psql文檔,可能能自解。

                聽說,“對于數據庫訪問提供了強大的安全性保證,充分利用了企業安全工具,如Kerberos與OpenSSL等” (http://www.infoq.com/cn/news/2013/12/mysql-vs-postgresql)
                阮老師,有沒有計劃,寫個psql安全配置的專文?


                非常感謝。你的文章非常用心,所以非常易懂。

                引用tewuapple的發言:

                user_tbl 不知道為什么你的表明加下劃線,其實表名是沒有下劃線的
                還有我按照你的方法添加用戶和數據庫
                但是按照psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432 連接卻提示:
                FATAL: Ident authentication failed for user "dbuser"

                我的也是這個錯誤?怎么解決

                簡潔,易懂,透徹,感謝。

                添加dbuser用戶之后,還需要設置dbuser密碼吧

                2016年10月26、27日,上海浦東,Postgres中國用戶大會2016(PG大象會)已經圓滿落幕了,大會現場大咖分享視頻已經正式上線(含嘉賓演講PPT),你可直接微信搜索公眾號“IT大咖說”(公眾號ID:itdakashuo)觀看視頻。
                PG中國社區的發展,需要你的成長與實踐,好好努力吧,也可轉發朋友圈進行分享,讓更多的朋友來了解和學習postgres,為postgreSQL在中國的成長貢獻一份力量!謝謝!

                創了數據庫的所屬住都是那個用戶了,為什么還要給那個用戶授權當前用戶的所有權限呢,不賦權限也是可以創建表的,

                沒理解創建 Linux 系統用戶 dbuser 的作用是什么?
                后面再 postgres 控制臺中創建的是數據庫的用戶,跟 Linux 系統用戶沒有關聯啊。

                我出現這種錯誤?
                Is the server running locally and accepting
                connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?

                您了解這個數據庫做地圖嗎 里面涉及到經緯度存儲 但是表格內無經緯度數據

                急著用postgres,看阮兄的博客迅速解決了問題。

                我要發表看法

                «-必填

                «-必填,不公開

                «-我信任你,不會填寫廣告鏈接

                99爱视频