PostgreSQL 使用者權限

在這篇教學中,我將解釋如何在 PostgreSQL 中管理使用者和權限。 在 PostgreSQL 中,一切都是圍繞著「角色(role)」的概念建立的。 在 macOS 安裝 PostgreSQL 時,安裝腳本會根據你的 macOS 使用者名稱建立一個角色,並且賦予一組權限。 在 PostgreSQL 中沒有使用者,只有角色。 透過在終端機中執行 psql postgres 命令,你會使用你的 macOS 使用者名稱自動登入 PostgreSQL,從而訪問被建立的角色。 在我的情況下,一個名為 flaviocopes 的角色已被建立,你可以使用 \du 命令來查看: 看到了嗎?我預設擁有以下的角色屬性: Superuser Create role Create DB Replication Bypass RLS 而且,我不屬於任何其他角色(稍後會講到這個)。 建立新角色 可以使用 CREATE ROLE 命令來創建新的角色: CREATE ROLE <role>; 例如: CREATE ROLE testing; 我們創建了一個新的角色,預設帶有 Cannot login 角色屬性。我們新建的使用者將無法登入。 你可以嘗試輸入 \q 命令退出,然後使用 psql postgres -U testing 命令,但你會看到以下錯誤: 為了解決此問題,我們需要在創建時加上 LOGIN 角色屬性: CREATE ROLE <role> WITH LOGIN; 如果我們刪除該角色:...

PostgreSQL介紹

對PostgreSQL數據庫進行高層次的概述 PostgreSQL(也被稱為PostgreSQL)是最受歡迎的SQL數據庫管理系統(DBMS)之一。 它是開源的,個人和商業使用都是免費的,並且它有著悠久的歷史,起源於1996年,建立在其他可追溯到1980年代的軟件之上。 PostgreSQL是一個非常完整和功能豐富的通用關聯數據庫。 它支持大部分的SQL標準,並且在此基礎上建立了一套獨特的功能,為我們提供了一個很好的工具。 您可以在專案主頁找到更多信息:https://www.postgresql.org。 我們可以使用多種不同的編程語言與PostgreSQL數據庫進行交互。在內部,作為一個關聯數據庫,我們將使用SQL插入、查詢和操作數據。 更多的PostgreSQL教程: 如何安裝PostgreSQL PostgreSQL用戶權限 如何列出PostgreSQL中的所有用戶 如何使用PostgreSQL列出所有數據庫 如何使用PostgreSQL切換數據庫 如何創建PostgreSQL數據庫 我將在不久的將來撰寫很多關於PostgreSQL的教程。我會在這裡鏈接它們。

practical-content-suggestions-blog

#您的博客的實用內容建議 內容長度,需要多長? 文章的長度並不重要。 互聯網上充斥著一堆營銷博客,告訴你內容必須有2000+字,10000+字等等。 但只要你的內容能解決某個人的問題,長度並不重要。 我有一些只用了50個字就解決了問題的文章,如果這是某個人需要的解決方案,那太好了! 沒有必要用無用的文字來稀釋內容,我相信當你看到一篇博客試圖將5行答案轉化為200行時,你會立刻察覺到。 同樣的情況也發生在視頻中,對吧?你在尋找某個東西時,卻需要觀看15分鐘的介紹才能找到核心內容。 我們要做的相反,要為讀者著想。 另外,谷歌並不在意內容長度。 保持內容專注 當我說谷歌不在意內容長度時,是因為我親眼見證了這一點。 我的一些訪問量最高的博客文章非常短,但它們解決了一個問題,而且迅速解決。 而谷歌也注意到了這一點。關鍵是解決問題。谷歌注意到你在幫助它幫助用戶,這就是你將文章專注於特定主題的時候所發生的。 某些主題表現得比其他主題更好,有些可能不那麼受歡迎,但只要它專注於一個小問題並且解決了它,那就很好了。 不要試圖迎合所有人 你無法為每個人寫出很棒的內容。挑選你的理想讀者,或者一群人,為他們寫作。 選擇你的受眾。 選擇你的部落。 忽略其他一切。 不要追求完美 完成比完美更重要。 這是我的信條。只要我的作品在技術上是正確的,沒有錯誤,那就沒問題。 你不需要過度思考。把注意力集中在足夠好上。那時候,收益递减的點就開始了。 大部分時候,足夠好已經比市面上的95%要好。 不要讓追求完美限制你的生產量。 即使有人已經寫過了某個主題也沒關係 有成千上萬個水品牌。成千上萬個葡萄酒和啤酒品牌。成千上萬家酒店。 越多人寫關於一個主題,對它的關注就越多,越多人閱讀有關該主題的內容。 如果沒有人寫過某件事,這可能並不意味著你是個先驅或“第一個人”,它可能只是意味著沒有人關心那個主題。 你不需要帶來新的東西 如果你擔心自己對某個事物沒有獨特的見解或革命性的想法,那麼你可能會限制自己。 通常,對某件已經存在的事物的1%或5%的改進已經足夠了。 谷歌並不是第一個搜索引擎。它只是做得更好。 Basecamp並不是第一個專案管理工具。它只是做得更好。 專注於變得更好,而不是創新。 你可以寫關於任何主題的博客 我是一名程序員,我寫關於編程的博客。如果你也是一名程序員,你不僅僅需要寫關於編程的博客。 這個世界上什麼都有可能。 主題並不重要,只要你對它充滿熱情。如果你強迫自己長時間寫關於一個主題,你很可能會燒壞自己。 只要有問題存在,你就能帶來解決方案。 對於我來說,狹小的市場是編程領域,而對於你來說可能是其他的領域。此外,編程甚至是一個糟糕的市場,因為大多數開發者認為即使一點點營銷都是垃圾,並且通常討厭收到郵件(因為他們每天都在使用電子郵件,可能已經收到很多郵件了)。 我認為博客,如果做得好,甚至在非技術性的主題上更容易成功。只要人們在互聯網上搜索這些主題,並且有一個他們可以找到這些內容的地方,比如一個大型的subreddit、一個大型的Facebook群組或一個熱門的在線論壇。

prepare-interview-questions

準備技術面試問題 介紹可能在面試中問到的內容 在面試中,您很可能需要經歷一系列的技術面試,這些面試將使公司對您的專業知識有一個良好的了解。 面試通常會在白板上進行。 您可能會被要求解決一個問題。 您可能會被問及算法的工作原理。 您可能會被要求實現以文字解釋的某些內容。 這很大程度上取決於您面試的公司。面試的目標是要看到您是否具有扎實的計算機科學基礎,並檢查您是否適合該職位。 有時面試官會要求您用口頭解釋您所做的選擇。這麼做的目的是看您是否能夠在協作環境中發揮作用,成為一個良好的團隊成員。 事先練習非常重要,因為一旦進入面試,您將面臨很大的壓力,如果您沒有做好準備,這一點將會顯露出來。 面試準備也應該成為一種習慣。作為員工,增加薪水的最佳方式就是換工作。轉到另一家更高級別的公司需要再次面試(除非您的技能可以為您說話,但通常情況下,您還是需要面試)。 現在,當談到準備問題時,真的是靠運氣。您可能會遇到的問題太多了,不可能為它們做好準備。但是,準備問題將為您提供一個框架,一個在面試中使用的系統。 如果您想申請大公司,我也強烈推薦閱讀《Java 程式設計面試實戰指南》這本書。 選擇一本關於計算機科學的書。例如,申請谷歌通常需要您熟悉許多計算機科學理論。觀看專門介紹此主題的YouTube視頻。在YouTube上搜索“準備谷歌面試”。 然後我還建議花大量時間在這些網站上: https://leetcode.com https://www.hackerrank.com https://github.com/jwasham/coding-interview-university https://www.reddit.com/r/cscareerquestions 準備申請大公司的面試絕對很難,因為他們優化對新的計算機科學畢業生的招聘,這一點是明顯的。 這也是為什麼我更喜歡申請一家小公司的原因,他們不需要花太多時間學習如何解答面試問題,而是更注重檢查我作為一個個體的實際能力,而不是我學習了多少計算機科學理論。

Prisma,如何清空資料庫

在測試使用Prisma的網站時,我經常需要清空資料庫,以清除我輸入的測試資料。 你可以使用以下方法來清除資料: await prisma.user.deleteMany({}) 如果出於某些原因你需要逐個進行處理,可以按以下方式對它們進行迭代: const users = await prisma.user.findMany({}) const deleteUser = async (user) => { return await prisma.user.delete({ where: { id: user.id } }) } const deleteUsers = async () => { users.map((user) => deleteUser(user)) } deleteUsers() 在這個例子中,其實比前面的例子多了些冗余程式碼,但你可以在deleteUser()中進行更多操作。 然而,我遇到了一個問題,因為兩個表之間存在關聯,即tweets和users。一篇tweet與一個user相關聯。所以我需要先刪除所有的tweets,然後再刪除所有的users。為此,我編寫了以下函數: export const clearData = async (prisma) => { const users = await prisma.user.findMany({}) const tweets = await prisma.tweet.findMany({}) const deleteUser = async (user) => { return await prisma.user.delete({ where: { id: user....

Prisma關聯

Prisma關聯解決了數據庫和數據處理的一個重大問題。 假設您的應用程序中有一個用戶列表,他們發表推文(想像Twitter)。 在您的schema中,您可以以以下方式定義這兩個實體之間的關係: model Tweet { id Int @id @default(autoincrement()) text String author User @relation(fields: [authorId], references: [id]) authorId Int } model User { id Int @default(autoincrement()) @id tweets Tweet[] } 當您創建一個新的推文時,您可以通過以下方式將其與ID為1的用戶關聯起來: await prisma.tweet.create({ data: { text: req.body.content, author: { connect: { id: 1 } } } }) 然後,當您獲取一個推文時,您可以檢索到作者的信息: await prisma.tweet.findMany({ include: { author: true } }) 您還可以創建一個用戶並將與其關聯的推文填充到數據庫中: await prisma.user.create({ data: { tweets: { create: [ { text: 'test' }, { text: 'test2' }, ] } } })

programmer-degree

我需要持有學位才能成為程式設計師嗎? 不需要。我有一個學位,可以肯定地說持有學位不是成為程式設計師的先決條件。 沒有人向我要求證明這一點。 儘管如此,獲得一份工作可能需要學位。某些工作申請可能要求學位,因為這有助於過濾大量的應聘者,而不是因為學位代表能力。學位可以代表能力,但對我個人而言,它只表示這個人有機會去花3-5年的時間獲得學位,並且有意願去完成它。這並不意味著他們比其他人更聰明。 我持有學位的事實意味著很多。我不是優秀的學生,甚至從來都不是。在高中時,我曾經重修兩年,但某個時刻,我決定我只想要一個電腦工程學位,因為我擅長電腦,你懂的。 儘管這讓我付出了很多痛苦,因為80%的考試甚至與電腦無關。那是數學、物理、統計學、數學和更多的數學。 我房間裡的學位證書並不代表我是一個好的程式設計師。相距甚遠。 我的班上有一半的人甚至在課堂外都不自主地編程。 如果你沒有自學的意願,即使你有計算機科學學位,你也永遠不會成為一名程式設計師。 世界上沒有哪所學校能比你用一本好書、一門好課程和強烈的學習意願教得更好。以及數千個小心翼翼的練習時間。 程式設計很棒,因為沒有門檻。 例如,我不能一天早上醒來說“我想在3年內成為一個優秀的醫生”。或許我可以,然後再回到學校等,但我無法僅僅通過自學和進行實驗就成為一個真正的醫生,對吧? 這也適用於律師和許多其他職業。 我明天可以醒來然後決定成為一名專業廚師,但也許如果我沒有上適當的學校,沒有人會在一家很棒的餐廳雇用我。但我可以開自己的餐廳,做出自己最好的菜。 這就是開始從事程式設計自由工作的一個好比喻。 你不需要任何學位來做這件事。你需要的是辛勤工作。辛勤工作和堅持。堅持下去。這是成為優秀的唯一方法。 閱讀盡可能多的書。但永遠不要認為你永遠不會像X一樣出色,只因為他們有學位。這並不意味著什麼。也許他們的前5年都在一個沒有挑戰性的環境中工作,他們會忘記所有學到的東西。 有些人報讀計算機科學學位是因為這個領域有錢賺,或者很容易找到工作。但是程式設計很難,需要不斷學習才能在這些年里保持相關性。也許他們沒有像你一樣的熱情。也許他們五年前有這種熱情,但現在因為辦公室政治而失去了。或者他們進入了一個不好的專業領域,像是嵌入式編程,而他們真正想做的是製作遊戲。 總結一下:成為一名程式設計師需要學位嗎?不需要。

programming-math

需要懂數學才能做程式設計嗎? 不一定需要。即使在學校的數學成績不好,你仍然可以成為一個優秀的程式設計師。 我自己從事程式設計已經有20年了,從來沒有因為忘記需要的數學知識而去翻數學書。我在高中和大學時學習了很多數學,那些內容非常高深抽象,甚至我現在都忘記了學習的目標是什麼(除了通過考試)。 有一種普遍的觀點是,要成為一個優秀的程式設計師,你必須擁有出色的數學能力。這種觀點可能是因為最早從事計算機編程的人大多數是數學家,主要是因為當時還沒有“計算機編程師”的專業學校。當然,計算機科學或計算機工程專業涉及許多數學知識,但這些對實際應用來說並非必須。計算機科學學位中90%的內容都是非常有趣但鮮有實用價值的。你需要數學來理解底層理論,但在日常編程中並不是必需的。 我的論點基本上是針對網頁開發這個領域而言。當然,有些編程工作需要數學。例如,在三維渲染引擎、地理信息系統應用、密碼學/區塊鏈/人工智能/機器學習等領域工作所需的數學知識肯定是很多的,但這些都是非常特定的數學知識,並不是在學校裡教授的。任何涉及底層圖形或遊戲編程的工作也需要數學知識,你需要在嘗試進行這方面工作之前先學習相應的數學知識。數學也對理解算法的複雜度有所幫助,但在最初幾年的編程中,你不太可能需要創造出新的算法。 然而,你需要擅長解決問題。我認為學校數學教育教會你如何解決問題,但其他愛好,比如玩數獨也同樣能訓練你解決問題的能力。 當然,你需要掌握一些基本的數學概念,如微積分、代數和邏輯,但只是一些基礎知識罷了。你不需要了解複數、概率、方程、圖形、指數與對數、極限、導數、積分、微分方程等任何複雜的知識。 不要聽信那些門戶守衛的話:如果他們告訴你因為數學不好,你就不能成為程式設計師,那就不要理他們。你總是可以在途中學到你需要的一切。保持學習的態度比已經知道一切更加重要。 再次強調,我講的是網頁開發,而不是需要數學知識的圖形學或特定應用領域。

Progressive Web Apps 完整指南

進步式 Web 應用程式(Progressive Web App,PWA)是一種根據裝置支援提供附加功能的應用程式,包括離線功能、推送通知、接近原生應用程式的外觀和速度,以及本地資源的快取。 介紹 什麼是進步式 Web 應用程式 進步式 Web 應用程式的替代方案 原生移動應用程式 混合應用程式 使用 React Native 建立的應用程式 進步式 Web 應用程式的功能 功能 優勢 核心概念 服務工作程序 應用程式清單 範例 應用程式殼層 快取 介紹 進步式 Web 應用程式(PWA)是使用 Web 技術進行行手機應用程式開發的最新趨勢,目前(2018年3月)可以在 Android 和 iOS 設備上使用,iOS 11.3 或更新版本,以及 macOS 10.13.4 或更新版本。 PWA 是一個標誌,它識別了一系列的技術,旨在打造更好的網絡應用程式體驗。 什麼是進步式 Web 應用程式 進步式 Web 應用程式是一個可以根據裝置支援提供附加功能的應用程式,包括離線功能、推送通知、接近原生應用程式的外觀和速度,以及本地資源的快取。 這個技術最初是由 Google 在2015年引入的,並且證明對開發人員和用戶都帶來了許多優勢。 開發人員可以使用 Web 技術構建幾乎一流的應用程式,這在成本和難度上通常要比構建原生應用程式容易許多,特別是考慮到構建和維護跨平台應用程式的影響。 開發人員可以從減少安裝摩擦中獲益,因為在目前時代,將應用程式加入應用商店實際上並不能為99.99%的應用程式帶來探索性的好處,而Google搜索則可以提供同樣的好處,甚至更多。 進步式 Web 應用程式是以特定技術開發的網站,可以使移動體驗比普通的移動優化網站更愉快,幾乎與原生應用程式一樣工作。它提供以下功能: 離線支援 快速加載 安全 能夠發送推送通知 在全屏幕中提供身臨其境的用戶體驗,無需 URL 欄位 移動平台(目前是 Android,但不僅限於此)對進步式 Web 應用程式的支援越來越多,以至於當它們偵測到用戶正在訪問的站點是進步式 Web 應用程式時,它們會要求用戶將該應用程式添加到主屏幕上。...

Pug指南

如何使用Pug模板引擎 Pug介紹 Pug長什麼樣子? 安裝Pug 設置Pug作為Express的模板引擎 你的第一個Pug模板 在Pug中插入變量 插入函數返回值 為元素添加id和class屬性 設置doctype Meta標籤 添加腳本和樣式 內聯腳本 循環 條件語句 設置變量 增加變量的值 將變量賦值給元素值 迭代變量 包含其他Pug文件 定義塊 擴展基礎模板 注釋 可見 不可見 Pug介紹 什麼是Pug?它是一個用於服務端Node.js應用程序的模板引擎。 Express有能力處理服務端模板引擎。模板引擎允許我們將數據添加到視圖中,動態生成HTML。 Pug是一個舊東西的新名字。它是Jade 2.0。 由於商標問題,當該項目在2016年發布2.0版本時,名稱從Jade更改為Pug。您仍然可以使用Jade(又名Pug 1.0),但未來最好使用Pug 2.0。 也可以參考Jade和Pug之間的差異 Express使用Jade作為默認的模板引擎。如上所述,Jade是Pug的舊版本 - 具體而言是Pug 1.0。 儘管Jade的最後一個版本已經是3年前(在撰寫本文時,2018年夏季),但出於向後兼容的原因,它仍然是Express的默認版本。 Pug的官方網站是https://pugjs.org/。 Pug長什麼樣子? p 您好,來自Flavio 此模板將創建一個內容為“您好,來自Flavio”的p標簽。 如您所見,Pug非常特殊。它將標簽名作為行中的第一個內容,其餘內容作為標簽中的內容。 如果您習慣使用使用HTML並插入變量的模板引擎(例如Handlebars,下面將進行介紹),您可能會遇到問題,尤其是當您需要將現有的HTML轉換為Pug時。這款將HTML轉換為Jade(非常相似,但與Pug稍有不同)的在線轉換器將非常有幫助:https://jsonformatter.org/html-to-jade 安裝Pug 安裝Pug非常簡單,只需運行npm install: npm install pug 設置Pug作為Express的模板引擎 在初始化Express應用程序時,我們需要設置它: const path = require('path') const express = require('express') const app = express() app.set('view engine', 'pug') app.set('views', path....